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 的小数值。
我有两个浮点值,我想将它们相减并将结果与 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 的小数值。