对Python中的小数精度感到困惑

dzjeubhm  于 2023-03-20  发布在  Python
关注(0)|答案(1)|浏览(136)

我使用Python decimal模块来解决浮点错误。根据我的理解,我可以通过在上下文中设置精度来设置小数点可以有多少位小数。但我最近发现,我对小数点精度的理解可能是错误的,因为这是我运行这段代码时发生的情况。

from decimal import Decimal, getcontext

getcontext().prec = 5

a = Decimal("80.05289")
b = Decimal("0.00015")

c = a * b
print(c)

通常,这段代码会打印0.0120079335,因为这是此计算的正确解,但是在精度设置为5的情况下,我预期结果为0.01201,因为7将被四舍五入。
奇怪的是,这些事情都没有发生,Python给我的结果是0.012008,就好像我把精度设置为6一样。有人能更好地向我解释发生了什么,以及我如何解决这个问题,使其总是只有5位小数吗?

e0bqpujr

e0bqpujr1#

decimal模块包含了有效位数的概念。getcontext().prec = 5表示你希望你的答案有5个有效位数。0.012008确实有5个有效位数。要得到结果0.01201,你必须将代码改为getcontext().prec = 4。

相关问题