(求解读源码) PHP 的 * 运算符会对 float 精度问题进行猜测修正吗?

2025-05-31 13:12:45      世界杯排名球队

疑问:

1.23 这个数值,在 float 在内部二进制转换时已经失真,为什么乘以 100 之后,最终的高精度表示结果 不是 1.2299999**** 类似这样的,而是 1.23000000000 这个结果呢?

PHP 的乘法运算符进行了猜测修正吗?

为什么乘以 100,最终结果是保真的, 乘以 10,不是保真的呢?

乘法运算符的代码: https://github.com/php/php-src/blob/master/Zend/zend_multiply.h

求大神解读。

乘 100 执行结果为:

乘 10 执行结果为:

[运行结果在 PHP5.4、5.6 和 7.1 上无差异,另外, 乘以 10 的结果是不保真的]

运行代码为:

echo "";

$a = 1.23;

$b = 100; //第二次运行 $b = 10;

echo '

$a = 1.23;

$b = 100;


';

echo '$a 的高精度数值为:';

printf("%0.30f", $a);

echo '


';

echo '$b 的高精度数值为:';

printf("%0.30f", $b);

echo "


";

echo '$a 的数据类型: ';

var_dump($a);echo "


";

echo '$b 的数据类型: ';

var_dump($b);echo "


";

$total = $a * $b;

echo '执行的计算为:

$total = $a * $b;

';

echo "


";

echo '计算结果:$total 为 ';

var_dump($total);echo "


";

echo '高精度计算结果: ';

printf("%0.99f", $total);

岌的意思,岌的解释,岌的拼音,岌的部首,岌的笔顺
1吨等于多少立方米?