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

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

4

3 回答 3

2

PHP 手册

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

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

于 2013-10-07T21:06:14.453 回答
0

正如评论中所说。0.1 + 0.7实际上0.8它不是存储为0.79999999. 当您将其转换为 aint时,它将截断小数并仅输出 7。如果您不将其转换为 aint它不会截断并输出预期值。

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

输出:

0.8
8
7

请注意PHP 指南中关于浮点数的非常大的警告。这几乎就是您要询问的确切示例。

于 2013-10-07T21:05:48.780 回答
0

要解决int截断问题,请使用round(), 指定精度

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

这会给你一个整数,不像只是省略round()orint()的情况下

echo (0.09+0.7)*10;
7.9
于 2013-10-07T21:06:50.760 回答