PHP でオッズ コンバーターを作成していて、小数オッズを小数オッズに変換するためのこのコードに出くわしました。
function dec2frac($dec) { 
    $decBase = --$dec; 
    $div = 1; 
    do { 
        $div++; 
        $dec = $decBase * $div; 
    } while (intval($dec) != $dec); 
    if ($dec % $div == 0) { 
        $dec = $dec / $div; 
        $div = $div / $div; 
    } 
    return $dec.'/'.$div; 
} 
コードをテストしたところ、計算に成功することもあれば、しばらくの間ページをロードしようとしても失敗することもあったため、何らかの形でループに陥ったと考えました。制限時間を 1 秒に設定し、ループ内にエコーを設定したところ、私の疑いが確認されました。この 2 つのエコーをループに追加して、何が問題なのかを確認しました。
echo "$dec $div<br/>";
echo var_dump(intval($dec) == $dec)." $dec is int<br/>";
10 進数 = 1.6 を使用した失敗時の出力例
1.2 2 
bool(false) 1.2 は int 
1.8 3 
bool(false) 1.8 は int 
2.4 4 
bool(false) 2.4 は int 
3 5 
bool(false) 3 は int //ここでブレークして 3/5 を返す必要があります
3.6 6 
bool( false) 3.6 は int 
4.2 7 
bool(false) 4.2 は int
10 進数 = 1.8 を使用した、成功時の出力例
1.6 2 
bool(false) 1.6 は int 
2.4 3 
bool(false) 2.4 は int 
3.2 4 
bool(false) 3.2 は int 
4 5 
bool(true) 4 は int  
時々整数を認識しないのはなぜですか? 整数が見つかったときにループを終了するように修正するにはどうすればよいですか?