因此,我需要创建以下函数,但如果没有复杂的数学,我的头脑无法在PHP中想到任何可能性。
- 始终四舍五入至最接近的小数点(1.81=1.90,1.89=1.90,1.85=1.90)
- 始终将四舍五入至最接近的小数点(1.81=1.80,1.89=1.80,1.85=1.80)
- 始终四舍五入,最接近x.25/x.50/x.75/x.00(1.81=2,1.32=1.50)
- 始终将向下取整至最接近的x.25/x.50/x.75/x.00(1.81=1.75,1.32=1.25)
- 始终四舍五入到最接近的x.50/1(1.23=1.50,1.83=2)
- 将始终四舍五入到最接近的x.50/1(1.23=1,1.83=1.50)
我已经在谷歌上搜索了两个小时,唯一出现的是Excel论坛。用一些简单的PHP行可以吗?
由于您正在查找四分之一(.00
、.25
、.50
、.75
),请将您的数字乘以4,根据需要四舍五入到最接近的整数(floor
如果向下,ceil
如果向上),然后除以4。
1.32,下降到最近的第四位:
1.32*4=5.28
楼层(5.28)=5.00
5.00/4=1.25
同样的原理适用于任何其他分数,如三分之一或八分之一(.0
、.125
、.25
、.375
、.5
、.625
、.75
、.875
)。例如:
1.77,最接近八分之一:
1.77*8=14.16
ceil(14.16)=15.00
15.00/8=1.875
只是为了好玩,你可以写一个这样的函数:
function floorToFraction($number, $denominator = 1)
{
$x = $number * $denominator;
$x = floor($x);
$x = $x / $denominator;
return $x;
}
echo floorToFraction(1.82); // 1
echo floorToFraction(1.82, 2); // 1.5
echo floorToFraction(1.82, 3); // 1.6666666666667
echo floorToFraction(1.82, 4); // 1.75
echo floorToFraction(1.82, 9); // 1.7777777777778
echo floorToFraction(1.82, 25); // 1.8
请注意,答案并不是真正的防水。由于我们在这里处理的是浮点数,所以不能保证当你用分母除以四舍五入的数字时,它会返回一个整齐的四舍五进的数字。它可能返回1.499999999999,而不是1.5。这就是浮点数的本质。
在从函数返回数字之前,需要进行另一轮运算。
万一有人像我一样从谷歌登陆这里:)
根据Excel中的mround()
函数:
function MRound($num,$parts) {
$res = $num * $parts;
$res = round($res);
return $res /$parts;
}
echo MRound(-1.38,4);//gives -1.5
echo MRound(-1.37,4);//gives -1.25
echo MRound(1.38,4);//gives 1.5
echo MRound(1.37,4);//gives 1.25
看看这里的示例#3,它是解决方案的一半-http://php.net/manual/en/function.round.php