我有以下php for loop
$screen = 1.3; // it can be other decimal value
for ($i = 1, $k = 0; $i <= $screen; $i += 0.1, $k+=25) {
echo $i . ' - ' . $k . '<br>';
}
它工作正常,但我想运行for循环直到1.3 - 75现在它打印我1.2 - 50.我尝试将$ i&lt; = $屏幕更改为$ i = $ screen但它不起作用。
答案 0 :(得分:5)
如果您阅读http://php.net/manual/en/language.types.float.php,那么您应该记住一个很好的陈述:
测试浮点值的相等性是有问题的,因为它们在内部表示的方式
要测试浮点值是否相等,使用由于舍入引起的相对误差的上限。此值称为机器epsilon或单位舍入,是计算中可接受的最小差异。
根据建议,您需要执行以下操作:
<?php
$screen = 1.3; // it can be other decimal value
$epsilon=0.0001;
for ($i = 1, $k = 0; $i <= $screen+$epsilon; $i += 0.1, $k+=25) {
echo $i . ' - ' . $k . "\n";
}
答案 1 :(得分:2)
两种解决方案:
$screen = 1.4; // it can be other decimal value
for ($i = 1, $k = 0; $i <= $screen; $i += 0.1, $k+=25) {
echo $i . ' - ' . $k . '<br>';
}
OR:
$screen = 1.3; // it can be other decimal value
for ($i = 1, $k = 0; $i <= $screen+0.1; $i += 0.1, $k+=25) {
echo $i . ' - ' . $k . '<br>';
}
测试。两者都有效...到目前为止我已经明白你想做什么了。
两者的测试输出:
1 - 0
1.1 - 25
1.2 - 50
1.3 - 75
答案 2 :(得分:0)
你得到了答案,这是实现同样目标的另一种方式,如下所示。 Source
$start = 1;
$end = 1.3;
$place = 1;
$step = 1 / pow(10, $place);
for($i = $start, $k=0; $i <= $end; $i = round($i + $step, $place), $k += 25)
{
echo $i . ' - ' . $k . '<br>';
}