提问人:dalleaux 提问时间:2/15/2023 更新时间:2/15/2023 访问量:67
我知道 Python (3.x) 应该四舍五入到偶数。为什么 round(0.975,2) = 0.97 但 round(0.975*100)/100 = 0.98?
I understand Python (3.x) is supposed to round to even. Why is round(0.975,2) = 0.97 but round(0.975*100)/100 = 0.98?
问:
所以问题在标题中。以下是一些更多详细信息:
法典:
a=0.975
print(round(a,2))
print(round(a*100)/100)
a=-0.975
print(round(a,2))
print(round(a*100)/100)
a=1.975
print(round(a,2))
print(round(a*100)/100)
a=-1.975
print(round(a,2))
print(round(a*100)/100)
打印输出为:
0.97
0.98
-0.97
-0.98
1.98
1.98
-1.98
-1.98
我想浮点错误以及如何处理浮点数有问题?
似乎在 -1 和 1 之间。可能是在移动浮点并在 5 之后创建一个具有更多数字的数字?round()
round()
有人可以解释一下,是否有办法避免这种情况?
答:
2赞
kithuto
2/15/2023
#1
这是一个已知的 isue,带有 Python 的浮点数。 您可以看到 Python 使用十进制库存储为小数点的实际值:
from decimal import Decimal
print(Decimal(0.975)
为了避免这个问题,你可以在轮次操作之前使用十进制库。
from decimal import Decimal
a = 0.975
print(float(round(Decimal(str(a)),2)))
这将打印所需的 0.98 结果。
这里有 Decimal 库文档: https://docs.python.org/3/library/decimal.html
评论
a