如何解决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
首先转换为浮点数(给出最接近的浮点数近似值) - 浮点数被传递给
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
的测试返回 False
。
您可以使用 k = Decimal("0.6")
获得精确为 0.6 的十进制值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。