gpt4 book ai didi

python - 为什么 round(2.49999999999999992) 返回 3

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:46 24 4
gpt4 key购买 nike

我正在学习数学类(class),但我遇到了一个很大的舍入问题。所以在我的程序做了一些数学运算之后,它会四舍五入结果。

一切正常,但如果 result == 2.49999999999999992 ,round 函数返回 3.0 而不是 2.0

我该如何解决?

谢谢。

最佳答案

正如@Pavel Anossov 在他的评论中所说 IEEE 754 中没有 2.49999999999999992 这样的东西,2.49999999999999992 == 2.5。。 float 对于您的计算可能始终至关重要,因为在任何情况下(32/64/128 位 float ),您都有精度限制。这显然也受限于 Python float 。

有不同的选择来处理这个问题,例如,您可以使用 decimal图书馆:

>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')
>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')

在这种情况下可以自己设置精度。 decimal在标准库中。

还有像bigfloat这样的第三方库,你可以使用(我没有这方面的经验):

>>> from bigfloat import *
>>> sqrt(2, precision(100)) # compute sqrt(2) with 100 bits of precision

但是如您所见,您始终必须选择一个精度。如果您真的不想失去任何精度,请使用 fractions (也在标准库中):

>>> from fractions import Fraction
>>> a = Fraction(16, -10)
>>> a
Fraction(-8, 5)
>>> a / 23
Fraction(-8, 115)
>>> float(a/23)
-0.06956521739130435

关于python - 为什么 round(2.49999999999999992) 返回 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18174377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com