C 整数赋值中的舍入错误

C 整数赋值中的舍入错误,c,floating-point,printf,rounding,scanf,C,Floating Point,Printf,Rounding,Scanf,你如何解释这里发生的舍入?我认为将浮点值赋给Int总是会导致小数点后的值丢失 int z=39.99999999999999999999999; printf("%d",z); // gives 40 谢谢你不可能有足够的双精度来容纳所有这些9 >>> '%.15f' % 39.9999999999999 '39.999999999999901' >>> '%.15f' % 39.99999999999999 '39.999999999999993' >

你如何解释这里发生的舍入?我认为将浮点值赋给Int总是会导致小数点后的值丢失

int z=39.99999999999999999999999;
printf("%d",z); // gives 40

谢谢

你不可能有足够的双精度来容纳所有这些9

>>> '%.15f' % 39.9999999999999
'39.999999999999901'
>>> '%.15f' % 39.99999999999999
'39.999999999999993'
>>> '%.15f' % 39.999999999999999
'40.000000000000000'

你不可能有一个足够精确的双精度来容纳所有的9

>>> '%.15f' % 39.9999999999999
'39.999999999999901'
>>> '%.15f' % 39.99999999999999
'39.999999999999993'
>>> '%.15f' % 39.999999999999999
'40.000000000000000'

正如您所说:C的浮点到整数转换截断(丢弃)小数部分

您使用的是哪种编译器?我相信这个赋值不是在运行时完成的,它可能是编译器的问题


参考:

正如您所说:C的浮点到整数转换截断(丢弃)小数部分

您使用的是哪种编译器?我相信这个赋值不是在运行时完成的,它可能是编译器的问题


参考资料:

点有点重,但基本阅读:点有点重,但基本阅读:你能解释一下你写的是什么吗?基本上,浮点不能准确地表示你用十进制写的数字。你得到了最好的估计。在本例中,他演示了将第15个9相加会将最佳估计值推高到40,因此当你将其截断为整数时,得到40。你能解释一下你写的是什么吗?基本上,浮点不能准确地表示你用十进制写的数。你得到了最好的估计。在本例中,他演示了将第15个9相加会将最佳估计值推高到40,因此当您将其截断为整数时,将得到40。浮点数将四舍五入。见伊格纳西奥·巴斯克斯·艾布拉姆斯的回答。谢谢你的洞察力。请你提供一个链接来解释这一点好吗?我只能找到与我链接的解释类似的解释。i、 有一篇有趣的文章简要地解释了浮点数:谢谢。我可以谦恭地请你试试这个吗?”INTA=2.6;printf(“%d\n”,a);'因为如果它打印的是
2
,这意味着
2.6
不是四舍五入,而是被截断。还是我遗漏了什么?浮点数是四舍五入的。见伊格纳西奥·巴斯克斯·艾布拉姆斯的回答。谢谢你的洞察力。请你提供一个链接来解释这一点好吗?我只能找到与我链接的解释类似的解释。i、 有一篇有趣的文章简要地解释了浮点数:谢谢。我可以谦恭地请你试试这个吗?”INTA=2.6;printf(“%d\n”,a);'因为如果它打印的是
2
,这意味着
2.6
不是四舍五入,而是被截断。还是我在这里遗漏了什么?