私はこのような整数で通常のループを行うことができることを知っています
for($i=0;$i<10;$i++)
{
echo $i;
}
問題:整数ではなく浮動小数点数(45分)
でループをループしたい。結果は次のようになります。
0.45
1.30
2.15
3.00
3.45
...
それを実現するためのPHPのヘルパー関数はありますか?
コメントを読んで、実際に時間で作業したいことを確認すると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");
}
ループ内でフロートを使用するだけです。$i++
ループの最後の部分では、カウンターを。だけインクリメントすることを意味します1
。これをに変更するだけ0.45
で完了です。
for($i=0;$i<10;$i=$i + 0.45)
{
echo $i;
}
// 編集
多くの人が指摘しているように、浮動小数点の精度には固有の問題があります。上記の例は少数でも機能する はず$i < 100
ですが、数が大きくなると問題が発生する可能性があります。
for($i=0;$i<10;$i += 0.45)
{
echo $i;
}
このようなもの?
そのためにフロート数に依存することはありません。理由は四捨五入です。
通常は、intを使用してから除算します。
for($i=0, $j=0; $i < $MAX; $i += 45, $j = $i / 100)
{
echo $j;
}
簡単に使えます
for($i=0.0;$i<10.0;$i=$i+0.45)
{
echo $i;
}
特に不正確な傾向があることを考えると、ループ自体を制御するために浮動小数点値を使用するかどうかはわかりません:-)
数式を念頭に置いているように見えるので、ループ内で数式を使用するだけです。
for ($i = 0; $ < 10; $i++) {
$num = 0.45 + $i * 0.85;
echo $num;
}
これにより、ループを整数で制御でき、その整数に基づく浮動小数点値が得られます。
多分このように:
for ($i=1; $i<=10; $i++) {
echo $i * 0.45."<br />";
}