我正在用 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 秒,并在循环中出现回声,这证实了我的怀疑。我将这两个回声添加到循环中,这样我就可以看到出了什么问题。
echo "$dec $div<br/>";
echo var_dump(intval($dec) == $dec)." $dec is int<br/>";
失败时的示例打印输出,使用十进制 = 1.6
1.2 2
bool(false) 1.2 is int
1.8 3
bool(false) 1.8 is int
2.4 4
bool(false) 2.4 is int
3 5
bool(false) 3 is int //应该在这里中断并返回 3/5
3.6 6
bool( false) 3.6 是 int
4.2 7
bool(false) 4.2 是 int
成功时的示例打印输出,使用小数 = 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
为什么有时它不能识别整数?如何修复它以便在找到整数时退出循环?