我使用python来对浮点数进行四舍五入,而我对计算机的四舍五入方式感到困惑。例如:
round(1.55, 1) = 1.6 # this is what I would expect; however
round(1.65, 1) = 1.6 #this is what confuses me. Is it supposed to be 1.7?
另一个例子:
round(1.85, 1) = 1.9
round(1.95, 1) = 1.9
我想这可能与二进制和十进制之间的转换有关。我的问题是我怎么知道结尾5是否会被省略?非常感谢您的帮助!
该文档描述了为什么发生此现象:
注意round()对浮点数的行为可能令人惊讶:例如,round(2.675,2)给出2.67,而不是预期的2.68。这不是错误:这是由于大多数十进制小数不能精确表示为浮点数的结果。有关更多信息,请参见浮点算法:问题和限制。
相关但不超出此问题的范围,对浮点算法的限制也很不错。
在该页面上,问题扩展为:
内置round()函数的文档说它四舍五入到最接近的值,四舍五入关系从零开始。由于十进制小数2.675恰好位于2.67和2.68之间的一半,因此您可能希望此处的结果是2.68(二进制近似值)。并非如此,因为当十进制字符串2.675转换为二进制浮点数时,它再次被二进制近似替换,其精确值为
2.67499999999999982236431605997495353221893310546875
由于此近似值比2.68略微接近2.67,因此四舍五入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句