为什么$x1
不等于$z2
?我已尝试round()
并明确将精度更改为8
。 $x1
应该等于$z2
$x1 = 251.47267993;
$y1 = 3861.62758730;
$z1 = $x1 / $y1;
echo "{$x1} / {$y1} = {$z1}\n\n"; // ok looks good
$x2 = .06512090;
$y2 = 3861.62758730;
$z2 = $x2 * $y2;
echo "{$x2} x {$y2} = {$z2}\n\n"; // hmm no - $z2 should be === to $x1
// why do these numbers NOT match? and how can I make them match?
// set some precision somewhere?
echo $x1 . " = " . $z2 . "\n";
更多信息:
_251.47267993_ /3861.62758730 =.06512090
.06512090 *3861.62758730 =_251.47266394_
251.47267993 - 251.47266394 = .00001599
请注意,下划线的2个数字应该相同,我们将其分开 乘以相同的数字。应该倒是......对......但不是我们的时候 不要使用无限数量的数字 - 因为它们不是偶数 关闭,他们相差“0.00001599”
答案 0 :(得分:1)
不知道你的目的是什么,但你为什么不这样做呢?
$x = 251.47267993;
$y = 3861.62758730;
$z1 = $x / $y;
$z2 = $z1 * $y;
echo $x . " = " . $z2 . "\n";
每次都等于
答案 1 :(得分:1)
还有另一个问题:回显浮动值。您必须增加precision。
echo 1 / 3, PHP_EOL; // 0.33333333333333
ini_set('precision', 60);
echo 1 / 3, PHP_EOL; // 0.333333333333333314829616256247390992939472198486328125
为什么要尝试使用屏幕上的值而不是变量?
答案 2 :(得分:0)
在PHP中,内置函数并不是那种计算的最佳选择。例如:
echo (int) ((0.1 + 0.7) * 10);
将输出7而不是8。
无论如何,251.47267993 / 3861.62758730不是0.06512090。在进行此计算时,根据计算机体系结构,它将打印不同的结果。对我来说它打印0.065120904138202,这是完全正常的,因为浮点数的精度约为14位小数。
你可以做的是使用BCMath库,这在php.net手册中有很好的记录。对于这种特殊情况,您可以使用:
$z1 = bcdiv($x1, $y1, 200);
而不是:
$z1 = $x1 / $y1;
看到这个数字并不是你想的那么小。有关详细信息,请查看BCMath library。