我使用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位小数吗?
1条答案
按热度按时间e0bqpujr1#
decimal模块包含了有效位数的概念。getcontext().prec = 5表示你希望你的答案有5个有效位数。0.012008确实有5个有效位数。要得到结果0.01201,你必须将代码改为getcontext().prec = 4。