<?php
echo (int) ((0.1 + 0.7) * 10);
为什么这个输出7而不是预期的8?
正如评论中所说。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 指南中关于浮点数的非常大的警告。这几乎就是您要询问的确切示例。
要解决int截断问题,请使用round(), 指定精度
echo round(0.09+0.7,1)*10;
8
这会给你一个整数,不像只是省略round()orint()的情况下
echo (0.09+0.7)*10;
7.9