我在 python 中遇到了一个非常奇怪的问题。 (使用 python 2.4.x)
在窗口中:
>>> a = 2292.5
>>> print '%.0f' % a
2293
但是在 Solaris 中:
>>> a = 2292.5
>>> print '%.0f' % a
2292
但这在windows和solaris中都是一样的:
>>> a = 1.5
>>> print '%.0f' % a
2
有人可以解释这种行为吗?我猜它的平台取决于 python 的编译方式?
最佳答案
最终负责执行格式化的函数是 PyOS_snprintf
(参见 the sources)。正如您猜测的那样,不幸的是,它依赖于系统,即它依赖于 vsprintf
、vsnprintf
或最终由平台的 C 运行时库提供的其他类似函数(我不不记得 C 标准是否对 float 的“%f”格式有任何说明,这些 float 在两个可能的舍入值之间“恰好在中间”……但是,C 标准是否对此松懈,或者更确切地说,C 标准是严格的,但是一些 C 运行时破坏了它,最终是一个相当学术的问题......)。
关于Python 舍入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2174081/