<?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