我在python中遇到了一个非常奇怪的问题.(使用python 2.4.x)
在Windows中:
>>> a = 2292.5
>>> print '%.0f' % a
2293
Run Code Online (Sandbox Code Playgroud)
但是在Solaris中:
>>> a = 2292.5
>>> print '%.0f' % a
2292
Run Code Online (Sandbox Code Playgroud)
但是在windows和solaris中都是一样的:
>>> a = 1.5
>>> print '%.0f' % a
2
Run Code Online (Sandbox Code Playgroud)
有人可以解释这种行为吗?我猜它的平台依赖于编译python的方式?
Ale*_*lli 10
最终负责执行格式化的功能是PyOS_snprintf
(参见来源).正如你猜测,这是不幸的是取决于系统,也就是说,它依赖于vsprintf
,vsnprintf
或最终由该平台的C运行时库提供的其他类似的功能(如果C标准说关于"%F"格式化什么我不记得在两个可能的舍入值之间"正好位于中间"的浮点数...但是,C标准是否对此不严格,或者更确切地说C标准是严格的,但是一些C运行时打破它,最终是一个相当学术问题...) .