Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环增加3个小数点php_Php_For Loop - Fatal编程技术网

循环增加3个小数点php

循环增加3个小数点php,php,for-loop,Php,For Loop,我需要一个循环,以增加数字的第三个小数点,打印应该像这样 1.1 1.101 1.102 1.103 ... 2.0 2.001 2.002 ... 2.1 2.101 ... for ($i = 1.1; $i <= 3; $i += .001){ echo $i . '<br />'; } 如果我使用 number_format($i,3) 我所有的数字都有3个小数点,比如 1.100,我需要它是1.1 我错过了什么? 尝试舍入值并将其存储在$i中: for

我需要一个循环,以增加数字的第三个小数点,打印应该像这样

1.1
1.101
1.102
1.103
...
2.0
2.001
2.002
...
2.1
2.101
...

for ($i = 1.1; $i <= 3; $i += .001){

   echo $i . '<br />';
}
如果我使用

number_format($i,3)
我所有的数字都有3个小数点,比如

1.100,我需要它是1.1

我错过了什么?

尝试舍入值并将其存储在$i中:

for ($i = 1.1; $i <= 3; $i += .001){
    $i = round($i, 3);
   echo $i . '<br />';
}

for($i=1.1;$i这应该适合您:

(这里我只是使用并指定它应该显示一个双精度(
lf
->longfloat)到第三个小数点)

echo sprintf(“%.3lf”,$i)。”
如果您想知道为什么会得到这样的结果,请参见:


顺便说一句:这种方法也有副作用,它显示:
1.560
而不是
1.56

了解浮点数。基本上,不是所有的十进制数都可以用浮点数精确表示

尝试将数字四舍五入:

for ($i = 1.1; $i <= 3; $i += .001){
   echo round($i,3) . '<br />';
}

对于($i=1.1;$i这是浮点运算工作方式的影响。这可能会导致精度低下。问题是计算中的错误会累积起来。因此,单靠舍入通常并不安全。它的安全性取决于所做的加法数,因此这里的迭代次数

请尝试这样做:

for ($i = 1100; $i <= 3000; $i++) {
   echo $i/1000 . "<br>\n";
}

用于($i=1100;$i这与浮点数在PHP@MatejŽvan中的存储方式有关,这个问题不是PHP特有的,它是浮点数算术的一般效果。@按钮确实如此,请尝试一下。为什么不应该呢?它实际上是对的,但我不明白为什么在这种情况下,舍入会有所不同?您可以吗te?如前所述:错误与迭代次数相加(好吧,这是简化的,但仍然正确)。仅对输出进行四舍五入是不安全的。工作方法是对总和进行四舍五入,因此类似($i=1.1;$i@Benn)的
,抱歉,忘记了ping您。请参见上文:^^^现在理解,但供我使用(我将其用于em行高度)这一轮似乎是好的,足够精确。如果这是更大的迭代,我会用你的解决方案。谢谢你的信息
for ($i = 1.1; $i <= 3; $i += .001){
   echo round($i,3) . '<br />';
}
for ($i = 1100; $i <= 3000; $i++) {
   echo $i/1000 . "<br>\n";
}