【发布时间】:2023-01-08 21:09:47
【问题描述】:
我希望将 a 四舍五入为13.95.我尝试使用round,但我得到:
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
对于标准库 Decimal 类的类似问题,请参阅How can I format a decimal to always show 2 decimal places?。
【问题讨论】:
-
嗯……你是想代表货币吗?如果是这样,您不应该使用浮点数来换取美元。您可能会使用浮点数来表示便士,或者您尝试建模的最小通用货币单位恰好是什么,但最佳做法是使用十进制表示法,正如 HUAGHAGUAH 在他的回答中所建议的那样。
-
重要的是不要用浮动表示货币。浮点数不精确。但是便士或美分的金额是整数。因此整数是表示货币的正确方式。
-
@Basic,这取决于(主要不是)。使用以美分或便士为单位的整数是傻瓜证明。它代表金钱的行业标准。如果您知道自己在做什么,对浮点运算和 Python 的 decimal 类有很好的理解,您可能会使用 decimal。但这在很大程度上取决于你的问题。你需要任意精度的小数吗?还是只有两位数?如果是两位数:整数。它让你远离麻烦。资料来源 我曾在一家银行软件咨询公司工作。
-
我来晚了,但我想问一下,Python 的开发者解决了这个问题吗?因为当我做 round(13.949999999999999, 2) 时,我只得到 13.95。我已经在 Python 2.7.6 和 3.4 中试过了。有用。不确定 2.7 甚至在 2009 年是否存在。也许它是 Python 2.5 的东西?
-
@bad_keypoints:是的,舍入问题已由 Python 2.7.0+ 解决。更多my answer 这里
标签: python floating-point rounding precision