PHP意外的整数/浮点计算

时间:2013-10-07 20:59:57

标签: php

<?php
echo (int) ((0.1 + 0.7) * 10);

为什么输出7而不是预期8

3 个答案:

答案 0 :(得分:2)

来自PHP manual

  

...这会导致令人困惑的结果:例如,floor((0.1+0.7)*10)通常会返回7而不是预期的8,因为内部表示将类似于{{1 }}

如果您想要准确性,建议您使用bcmath功能。

答案 1 :(得分:0)

如评论中所述。 0.1 + 0.7实际上不是0.8,而是0.79999999。当你把它强制转换为int时,它会截断小数,只输出7.如果你不把它强制转换为int,它就不会截断并输出预期值。

echo (0.1 + 0.7);
echo ((0.1 + 0.7) * 10);
echo (int) ((0.1 + 0.7) * 10);

输出:

0.8
8
7

请注意PHP Guide中浮点数的非常大的警告。这几乎就是你要问的确切例子。

答案 2 :(得分:0)

要超越int截断问题,请使用具有指定精度的round()

 echo round(0.09+0.7,1)*10;
 8

这会给你一个整数,不像在

的情况下省略round()int()
echo (0.09+0.7)*10;
7.9