python 中的基本浮动减法

Basic floating subtraction in python

我有两个浮点值,我想将它们相减并将结果与​​ if 语句中的另一个值进行比较。 问题,我没有得到预期的结果。 我尝试使用 Decimal module.

from decimal import Decimal, getcontext    
getcontext().prec = 3
value_1 = 60.32
value_2 = 59.72
condition = 0.6

sub = Decimal(value_1) - Decimal(value_2)

但是,

sub <= condition
FALSE

sub <= Decimal(condition)
FALSE

这个答案解释了为什么这个问题是 Is floating point math broken? 的骗局。


如果你使用

 k = Decimal(0.6)

并检查 k 你得到:

这是“浮动数学是否损坏”的案例:

  • 首先将数字 0.6 转换为浮点数(给出最接近的浮点数近似值)
  • float 被传递给 Decimal 构造函数,它尽职尽责地构造了一个 Decimal,它比最初放入您的源代码中的 0.6 小一点。

您可以通过向十进制构造函数提供您的数字字符串来绕过“浮点数”转换来避免这种情况。

正在检查

value_1 = 60.32
value_2 = 59.72
sub = Decimal(value_1) - Decimal(value_2)

导致:

正好是 0.6。由于 k 现在略小于 0.6,您对 sub <= k returns False.

的测试

您可以使用 k = Decimal("0.6") 得到一个正好为 0.6 的小数值。