float除法精度损失

susu09new 2010-07-31 11:32:16
今天遇到一个问题百思不得其解:一个float a=2.1,int b=100*a/10。b的结果理论上应该是21吧,但是实际结果却是20,精度损失了,a=2.2就没有精度损失,这是为什么呢?double型的也没有损失?请各位指点
...全文
1117 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
奋斗小青年 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 shi3590 的回复:]
引用 4 楼 xjh53759299 的回复:
四舍五入吧
int b=floor(100*a/10+0.5)

四舍五入最安全,只要用到浮点数算法都要考虑。
[/Quote]

这里说了
shi3590 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xjh53759299 的回复:]
四舍五入吧
int b=floor(100*a/10+0.5)
[/Quote]
四舍五入最安全,只要用到浮点数算法都要考虑。
donkey301 2010-08-26
  • 打赏
  • 举报
回复
最好不要用float转换成int,如果一定要转,那么四舍五入比较合适。
栗豆 2010-08-26
  • 打赏
  • 举报
回复
float a=2.1,int b=100*a/10;
为什么我的答案会是0.000000
hslinux 2010-08-02
  • 打赏
  • 举报
回复
浮点数运算是有精度损失的,如果需要再取整的话,很多时候做法是先+0.001然后再取整。
herman~~ 2010-08-01
  • 打赏
  • 举报
回复
lz可以看下浮点的存储方法
susu09new 2010-07-31
  • 打赏
  • 举报
回复
换成double可以
ayw215 2010-07-31
  • 打赏
  • 举报
回复
计算机存储浮点数的时候本来就是有精度损失的
换double试一试
十八道胡同 2010-07-31
  • 打赏
  • 举报
回复
double的精度损失小一些,但是都有
晨星 2010-07-31
  • 打赏
  • 举报
回复
5楼说的不对,整数跟浮点数相乘,不是浮点数转化成整数运算,而是整数转化成浮点数参加运算。
yunyun1886358 2010-07-31
  • 打赏
  • 举报
回复
我刚试了下,float的简单乘法也有精度损失

int main(void)
{
float a=2.1;
float c = a * 100; // c=209.99998
int b=c/10;

return 0;
}
晨星 2010-07-31
  • 打赏
  • 举报
回复
不光是除法运算中有精度损失,编译器把你程序中以十进制形式书写的浮点数转化成CPU认识的二进制浮点数格式时也可能有损失。
job82824 2010-07-31
  • 打赏
  • 举报
回复

int b=100*a/10;//100是整数,所以使用了整数运算,a变成了2;可以改成int b=100f*a/10;
xjh53759299 2010-07-31
  • 打赏
  • 举报
回复
四舍五入吧
int b=floor(100*a/10+0.5)

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧