我在python中遇到了一个非常奇怪的问题。 (使用python 2.4.x)
在Windows中:
>>> 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的方式?
答案 0 :(得分:10)
最终负责执行格式化的功能是PyOS_snprintf
(见the sources)。正如你猜测的那样,遗憾的是系统依赖于它,即它依赖于vsprintf
,vsnprintf
或其他类似的函数,这些函数最终由平台的C运行时库提供(我不记得是否符合C标准)对于两个可能的舍入值之间“正好中间”的浮点数的'%f'格式说了什么......但是,C标准是否对此松散,或者说C标准是严格的,但有些C运行时会破坏它,最终是一个相当严重的学术问题......)。
答案 1 :(得分:2)
round()向最接近的偶数整数舍入 “%n.nf”与round()的工作方式相同 int()截断为零
“将正数四舍五入到最接近的整数
可以通过添加0.5并截断“
来实现
- http://en.wikipedia.org/wiki/Rounding
在Python中,您可以执行以下操作:math.trunc( n + 0.5 )
假设n当然是肯定的......
如果“圆半到均匀”不合适,我现在使用
math.trunc( n + 0.5 )
我过去常常使用int(round(n))
答案 2 :(得分:0)