int a = atof("4.60") * 100;
int b = atof("6.60") * 100;
printf("a:%d",a); //<==== here print a:459
printf("b:%d",b); //<==== here print b:660
在IEEE 754中,4.60是4.599999999 ...而6.60是6.5999999 ...... 我希望打印b也会显示659。 截断是如何工作的?
答案 0 :(得分:0)
正如您所说,源代码中的6.6
并不完全是6.6,而是6.5999999999999996447286321199499070644378662109375。同样,4.6
生成4.5999999999999996447286321199499070644378662109375。
当你乘以100时,会出现另一个舍入误差,因为新值在浮点中不能完全表示,必须四舍五入到最接近的可表示值。
对于6.6 * 100
,最近的可表示值为660。
对于4.6 * 100
,最接近的可表示值为459.99999999999994315658113919198513031005859375。