浮点数如何转换为带截断的整数?

时间:2018-04-02 16:25:21

标签: c floating-point ieee-754

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。 截断是如何工作的?

1 个答案:

答案 0 :(得分:0)

正如您所说,源代码中的6.6并不完全是6.6,而是6.5999999999999996447286321199499070644378662109375。同样,4.6生成4.5999999999999996447286321199499070644378662109375。

当你乘以100时,会出现另一个舍入误差,因为新值在浮点中不能完全表示,必须四舍五入到最接近的可表示值。

对于6.6 * 100,最近的可表示值为660。

对于4.6 * 100,最接近的可表示值为459.99999999999994315658113919198513031005859375。