我有这段代码:
for($i = 1; $i <= $max; $i+=0.1) {
echo "$i<br>";
}
如果变量$max = 6;
结果为:1, 1.1, 1.2, 1.3 .... 5.8, 5.9, 6
,但变量$max = 4
结果为:1, 1.1 ... 3.8, 3.9
,但数字4丢失。
请解释此行为,以及可能的解决方案。
当我使用条件$i <= $max;
或$i < $max;
$max
为2, 3 or 4
答案 0 :(得分:4)
来自http://php.net/manual/en/language.types.float.php
此外,基本10中的浮点数精确表示的有理数,如0.1或0.7,没有精确表示为基数2中的浮点数,无论尾数的大小如何,它都在内部使用。因此,它们不能在没有很小精度损失的情况下转换为它们的内部二进制对应物。
所以要克服这一点,你可以将你的数字乘以10。
所以$max
是40或60。
for($i = 10; $i <= $max; $i+=1) {
echo ($i/10).'<br>';
}
答案 1 :(得分:2)
$err = .000001//allowable error
for($i = 1; $i <= $max+$err; $i+=0.1) {
echo "$i<br>";
}
答案 2 :(得分:2)
You can use of number_format()
<?php
$max=6;
for($i = 1; number_format($i,2) < number_format($max,2); $i+=0.1) {
echo $i."<br>";
}
&GT;
答案 3 :(得分:1)
使用整数时应设置精度
像这样:$e = 0.0001;
while($i > 0) {
echo($i);
$i--;
}