php 0.1+0.7==0.8 结果为false

var_dump(0.1+0.7==0.8)结果bool(false)

这是由于在PHP中,浮点数运算的精度限制导致的。
在你的例子中,0.1 + 0.7 的结果应该等于 0.8,但由于精度限制,结果实际上略微偏离了0.8。例如,你可以使用abs()函数来比较两个浮点数的绝对差值是否在一个小范围内:
phpvar_dump(abs(0.1 + 0.7 - 0.8) < 0.00001); // bool(true)

在这个例子中,我们使用了一个非常小的误差范围(0.00001),如果两个浮点数的绝对差值在这个范围内,就可以认为它们是相等的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-02-10
在计算机编程中,var_dump 是一个 PHP 函数,用于显示变量的结构化信息,包括其类型和值。
在这种情况下,var_dump(0.1 + 0.7 == 0.8) 是评估表达式 0.1 + 0.7 == 0.8,然后使用 var_dump 显示结果。该表达式将 0.1 和 0.7 的和与 0.8 进行比较,比较返回 false。
原因是在大多数计算机系统中,浮点数(如 0.1 和 0.7)在内存中不能精确表示,因此它们的加法和比较可能导致很小的不准确性。这可能导致像这样的意外结果,其中一个看似相等的表达式返回 false。为了减轻这个问题,通常建议在金融或科学计算中使用容限或不同的数据类型。
第2个回答  2023-04-02
这是因为在计算机中使用二进制来存储浮点数,而0.1和0.7在二进制中是无限循环的小数,因此在计算机中无法完全精确地表示这两个数字。在PHP中,当浮点数比较时,需要考虑浮点数运算的精度问题。
如果要比较浮点数,可以使用PHP中的bccomp函数进行高精度运算,或者将浮点数转换为整数进行比较。例如:
$sum = 0.1 + 0.7;if (intval($sum * 10) == 8) { echo "0.1 + 0.7 = 0.8";
} else { echo "0.1 + 0.7 != 0.8";
}

这里将浮点数乘以10并取整,然后再和8进行比较,从而避免了浮点数运算精度问题。
第3个回答  2021-04-25
$a = bcadd(0.1,0.7,2);
$b = bccomp($a, 0.8 , 2);

var_dump($b)
第4个回答  2018-01-27
因为看似简单的小数,在计算机内部用二进制表示时候可能是无限循环小时、或者位数很长的小数,转换两次就有误差,因此造成你这样的结果。
我们应该吸取的经验是,用于不要判断两个浮点数是否相等,而是判断差的绝对值在某个精度要求范围内,例如abs(x-y)<0.000001本回答被网友采纳