我最近开始学习PHP.
<?php
echo (int) ( (0.1+0.7) * 10 ); // prints '7', why not '8' ?
?>
Run Code Online (Sandbox Code Playgroud)
请让我相信这种类型转换过程.
Jam*_*win 12
来自PHP.net
通常,像0.1或0.7这样的简单小数部分不能转换成它们的内部二进制对应,而不会有很小的精度损失.这可能会导致混乱的结果:例如,floor((0.1 + 0.7)*10)通常会返回7而不是预期的8,因为内部表示将类似于7.9.
这是因为不可能用有限数字的十进制表示法表示一些分数.例如,十进制形式的1/3变为0.3.
您遇到浮点不准确.
0.1 + 0.7不完全是0.8,但略小.转换为int只是截断值,结果为7.
要获得正确的结果,请使用舍入:
<?php
echo (int) round( (0.1+0.7) * 10 );
?>
Run Code Online (Sandbox Code Playgroud)