我正在为客户做一个项目,这很简单。但是我必须做一个计算,它也很简单,就像这个例子:
$a = (49.95 - 24.95);
if ($a == 25.00) {
echo "TRUE";
}
这等于 25.00 对!但是没有它的返回错误???
但是如果我这样做,另一个类似于我需要的计算的例子:
$a = (99.95 - 24.95);
if ($a == 75.00) {
echo "TRUE";
}
那我就当真了!我要疯了,还是这是一个错误???
我正在为客户做一个项目,这很简单。但是我必须做一个计算,它也很简单,就像这个例子:
$a = (49.95 - 24.95);
if ($a == 25.00) {
echo "TRUE";
}
这等于 25.00 对!但是没有它的返回错误???
但是如果我这样做,另一个类似于我需要的计算的例子:
$a = (99.95 - 24.95);
if ($a == 75.00) {
echo "TRUE";
}
那我就当真了!我要疯了,还是这是一个错误???
就像您可以阅读手册一样,不要直接比较浮点数。而是使用epsilon
.
<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a-$b) < $epsilon) {
echo "true";
}
这是因为 PHP 存储在内部浮动的方式。您可以在手册中阅读它,例如。这里http://pl1.php.net/float
$a = (49.95 - 24.95);
if ((int)$a == 25) {
echo "TRUE";
}
在第一个示例中,有一个浮点数与一个 int 数进行比较,而在第二个示例中,有一个浮点数与一个浮点数进行了比较。差异是由于浮点精度而不是错误而发生的。
为了解决这个问题,您可以定义一个d (delta)
数字,该数字将是计算的精度
然后你可以检查绝对结果x-y
是否会低于你定义的精度。像这样的东西if(abs(x-y) < d)