<?php
echo (int) ((0.1 + 0.7) * 10);
为什么输出7
而不是预期8
?
答案 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