Python 舍入问题

标签 python rounding

我在 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)。正如您猜测的那样,不幸的是,它依赖于系统,即它依赖于 vsprintfvsnprintf 或最终由平台的 C 运行时库提供的其他类似函数(我不不记得 C 标准是否对 float 的“%f”格式有任何说明,这些 float 在两个可能的舍入值之间“恰好在中间”……但是,C 标准是否对此松懈,或者更确切地说,C 标准是严格的,但是一些 C 运行时破坏了它,最终是一个相当学术的问题......)。

关于Python 舍入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2174081/

相关文章:

sql舍入并不总是向上舍入

php - 如何舍入金额正确?

python - 精确但没有尾随 0 的圆 Pandas 列

使用 macOS Mojave 10.14 的 Python 变慢

swift - 舍入崩溃的计算

c# - 为什么 .NET decimal.ToString(string) 从零舍入,显然与语言规范不一致?

c - 如何将 float 舍入到给定的小数精度

python - Django HTMLForms 属性错误 属性错误 : module 'polls.views' has no attribute 'index'

python - Django Heroku 和 postgresql

python - SQLAlchemy - 无法使用 NULL 作为主键值来更新表