使用大于或小于运算符的PHP浮点比较

使用大于或小于运算符的PHP浮点比较,php,floating-point,Php,Floating Point,我已经读到,由于可能存在浮点精度错误,您不应该直接比较PHP浮点数 我有一个浮点数,我需要根据浮点数所属的范围来设置一个变量。像这样的- $mytext; if ($myfloat < 5.5) { $mytext = "a"; } else if ($myfloat < 9.7) { $mytext = "b"; } else { $mytext = "c"; } 使用PHP的正确方法是什么?有些人建议不要将浮点数与等式运算符(如==或!=)进行比较,但这一建议被误

我已经读到,由于可能存在浮点精度错误,您不应该直接比较PHP浮点数

我有一个浮点数,我需要根据浮点数所属的范围来设置一个变量。像这样的-

$mytext;

if ($myfloat < 5.5) {
  $mytext = "a";
} else if ($myfloat < 9.7) {
  $mytext = "b";
} else {
  $mytext = "c";
}

使用PHP的正确方法是什么?

有些人建议不要将浮点数与等式运算符(如==或!=)进行比较,但这一建议被误导了。相等运算符可以正常工作,不会出错。更好的建议是这样的:浮点算术运算(包括类型之间的转换和从数字(如“5.5”)的转换)通常会引入舍入误差,因此浮点运算的计算结果通常与数学上精确的结果不同。如果希望确定使用近似浮点建模的两个精确值是否相等,则应:

确定建模值中可能存在的误差。 确定您是否可以容忍由于浮点错误而报告的精确数量略有不同,以及您可以容忍的误报数量的差异。 确定是否可以容忍由于浮点错误或误报而报告的相等精确金额。 至少,你应该估计一下上述情况。然后确定是否有一个测试可以返回低误报率和低误报率的结果。通常,人们使用诸如fabsa-b 猜测不是工程


以上是为了平等。类似的问题也适用于顺序比较,例如,不应直接比较浮点等式。你很好。