【发布时间】:2021-06-19 10:44:12
【问题描述】:
1 / 9 * 9 的结果应该等于1。然而,Python 返回0.99999999999...
from decimal import Decimal
import decimal
decimal.getcontext().rounding = decimal.ROUND_HALF_UP
decimal.getcontext().prec = 256
dec1 = Decimal('1')
dec9 = Decimal('9')
dec_result = dec1 / dec9 * dec9
print(type(dec_result))
print(dec_result)
我需要一个精确的计算方法,;因此,使用小数与浮点数。
有人可以提出解决办法吗?谢谢...
【问题讨论】:
-
把除法放在最后:
dec1 * dec9 / dec9 -
这不起作用,因为我无法控制订单。最终用户是。
-
1/9 不能显示为十进制。使用
fraction而不是decimal。 -
这不是hack,这是标准方式。例如,那个windows计算器,excel,不管做什么。您不需要那么高的精度,您只需要再显示 1 个数字。是的,这是不精确的。是的,对于特定的用例,还有其他方式来表示暗示其他妥协的数字。但是由于您没有提到用例……
-
@spectras 我建议在答案中比您需要的精度高一些,如果在显示答案之前进行大量计算,您可能会累加很多舍入误差,这就是为什么浮点单元使用 80 位精度,但双精度仅存储 64 位
标签: python decimal calculation