4

私はこのような整数で通常のループを行うことができることを知っています

for($i=0;$i<10;$i++)
{
   echo $i;
}

問題:整数ではなく浮動小数点数(45分)
でループをループしたい。結果は次のようになります。

0.45
1.30
2.15
3.00
3.45
...

それを実現するためのPHPのヘルパー関数はありますか?

4

7 に答える 7

13

コメントを読んで、実際に時間で作業したいことを確認するとDateTime、forループ内でオブジェクトを使用することもできます

次にいくつかのサンプルコードを示します。

for (
    $d = new DateTime('00:00'), // Initialise DateTime object .
    $i = new DateInterval('PT45M'); // New 45 minute date interval
    $d->format('H') < 10; // While hours (24h) less than 10
    $d->add($i) // Add the interval to the DateTime object
)
{
    echo $d->format("H:i\n");
}
于 2012-12-04T13:58:24.183 に答える
2

ループ内でフロートを使用するだけです。$i++ループの最後の部分では、カウンターを。だけインクリメントすることを意味します1。これをに変更するだけ0.45で完了です。

for($i=0;$i<10;$i=$i + 0.45)
{
   echo $i;
}

// 編集

多くの人が指摘しているように、浮動小数点の精度には固有の問題があります。上記の例は少数でも機能する はず$i < 100ですが、数が大きくなると問題が発生する可能性があります。

于 2012-12-04T13:24:54.667 に答える
1
for($i=0;$i<10;$i += 0.45)
{
   echo $i;
}

このようなもの?

于 2012-12-04T13:24:29.937 に答える
0

そのためにフロート数に依存することはありません。理由は四捨五入です。

通常は、intを使用してから除算します。

for($i=0, $j=0; $i < $MAX; $i += 45, $j = $i / 100)
{
    echo $j;
}
于 2012-12-04T13:26:23.620 に答える
0

簡単に使えます

for($i=0.0;$i<10.0;$i=$i+0.45)
{
   echo $i;
}
于 2012-12-04T13:27:55.753 に答える
0

特に不正確な傾向があることを考えると、ループ自体を制御するために浮動小数点値を使用するかどうかはわかりません:-)

数式を念頭に置いているように見えるので、ループ内で数式を使用するだけです。

for ($i = 0; $ < 10; $i++) {
   $num = 0.45 + $i * 0.85;
   echo $num;
}

これにより、ループを整数で制御でき、その整数に基づく浮動小数点値が得られます。

于 2012-12-04T13:28:14.727 に答える
-1

多分このように:

for ($i=1; $i<=10; $i++) {
    echo $i * 0.45."<br />";
}
于 2012-12-04T13:26:15.240 に答える