【发布时间】:2013-05-23 10:45:13
【问题描述】:
我正在尝试将运动赔率从小数转换为分数。我通过搜索找到了一个运行良好的 PHP 函数,但某些小数会导致问题,例如 2.1 会超出服务器:
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;
}
$decimal = 2.3;
echo $decimal.' --> '.dec2frac($decimal);
6 的小数赔率应该是 5/1。这被计算为 6-1=5 = 5/1
我发现 2.2 和 2.3 的十进制输入会使函数跳闸,但其他值似乎没问题。是什么导致了这个异常,有办法解决吗?
谢谢。
【问题讨论】:
-
可能是while循环正在循环一个非常长的数字?
-
echo dec2frac(0.25);给出-3/4,我非常怀疑这是正确的。 -
5 --> 4/1 显然不止一个异常
-
我应该补充一点,这是体育博彩赔率的转换。所以 5 -> 4/1 是正确的。 5-1 = 4 = 4-1 或 4/1
-
您能否提供更多输入和预期输出?
dec2frac(2.1)的结果应该是什么?
标签: php algorithm decimal fractions