python中的基本浮点减法

python中的基本浮点减法,python,floating-point,subtraction,Python,Floating Point,Subtraction,我有两个浮点值,我想减去它们,然后将结果与if语句中的另一个值进行比较。 问题是,我没有达到预期的效果。 我试着用 但是, sub这个答案解释了为什么这个问题是重复的 如果你使用 k = Decimal(0.6) 然后检查k您得到: 这是一个“浮动数学是否被破坏”的案例: 数字0.6首先转换为浮点值(其中给出了最接近的浮点近似值) 浮点数被传递给Decimal构造函数,该构造函数尽职尽责地构造一个Decimal,它比最初放入源代码中的0.6小一点 您可以通过向十进制构造函数提供一个数

我有两个浮点值,我想减去它们,然后将结果与if语句中的另一个值进行比较。 问题是,我没有达到预期的效果。 我试着用

但是,


sub这个答案解释了为什么这个问题是重复的


如果你使用

 k = Decimal(0.6)
然后检查
k
您得到:

这是一个“浮动数学是否被破坏”的案例:

  • 数字
    0.6
    首先转换为浮点值(其中给出了最接近的浮点近似值)
  • 浮点数被传递给
    Decimal
    构造函数,该构造函数尽职尽责地构造一个
    Decimal
    ,它比最初放入源代码中的
    0.6
    小一点
您可以通过向十进制构造函数提供一个数字字符串来避免这种情况,而不是绕过“float”转换

检查

value_1 = 60.32
value_2 = 59.72
sub = Decimal(value_1) - Decimal(value_2)
导致:


正好是0.6。由于
k
现在略低于你的
sub-Hi测试的0.6,你能为你的问题添加一些上下文吗?例如,您正在调用的“Decimal”函数是什么?这是您的实现还是属于导入的模块?对不起,我编辑了我的帖子(或者在您的例子中:
sub当这里涉及浮点舍入时,这个答案没有说明源代码中的数字在
Decimal
构造函数将其转换为十进制之前已转换为二进制浮点值。因此,转换为十进制值的是二进制浮点值,而不是原始数字解决这个问题的一个办法是将变量更改为字符串,例如
value\u 1='60.32'
,这样数字就被保留并传递给构造函数。这是这个问题的关键点,所以不应该将其标记为浮点黑洞的副本。@EricPostChil我仍然认为这是一个重复,但我用在这种情况下,真正的原因是使用浮点数来创建小数,而这个错误归结为浮点数数学错误。。。
 k = Decimal(0.6)
value_1 = 60.32
value_2 = 59.72
sub = Decimal(value_1) - Decimal(value_2)