我正在使用 5 角星创建这个评级系统。我希望标题包括平均评分。所以我创建了显示 1/5 的星星。使用“1.2”,我会得到一颗满星,下一颗星得到一分,依此类推......
但我还没有找到一个很好的方法来四舍五入到最接近的 0.2... 我想我可以乘以 10,然后四舍五入,然后运行一个开关,从 1 到 2、3 到 4 等等在。但这似乎乏味且不必要……
round(3.78 * 5) / 5 = 3.8
灵活的解决方案
function roundToNearestFraction( $number, $fractionAsDecimal )
{
$factor = 1 / $fractionAsDecimal;
return round( $number * $factor ) / $factor;
}
// Round to nearest fifth
echo roundToNearestFraction( 3.78, 1/5 );
// Round to nearest third
echo roundToNearestFraction( 3.78, 1/3 );
function round2($original) {
$times5 = $original * 5;
return round($times5) / 5;
}
所以你的总数是 25,是否可以不使用浮点数并使用 1->25/25?这样就需要更少的计算......(如果有的话)
为什么每个人都提供需要更深入检查或转换的解决方案?想要0.2?然后:
round($n / 0.2) * 0.2; // $n = 3.78 / 0.2 = 18.9 (=) 19 * 0.2 = 3.8 //
想要5个?然后:
round($n / 5) * 5; // $n = 17 / 5 = 3.4 (=) 3 * 5 = 15 //
就这么简单。