2009-04-28 7 views
6

5つ星の星を使用してこの評価システムを作成しています。そして私は見出しに平均格付けを含めたいと思う。だから私は1/5thを示す星を作りました。 "1.2"を使うと次の星に1つのフル・スターと1つのポイントが得られます。PHPを使用して数値を0に近づける

しかし、私は最も近い.2まで切り上げる良い方法を見つけませんでした...私は考えました私は10を掛けて乗算し、次に1を2に、3を4に、そうするためにスイッチを実行することができます。しかし、それは

答えて

27
round(3.78 * 5)/5 = 3.8 
+0

awesome!私はこれに簡単な解決策がなければならないことを知っていました。ありがとうございます( – peirix

+0

素晴らしいソリューションです)ありがとうございます。 – alumi

4
function round2($original) { 
    $times5 = $original * 5; 
    return round($times5)/5; 
} 
3

...退屈、不必要なようだだからあなたの合計は、浮動小数点数を使用して、1-> 25/25を使用しないことも可能であろう、25のですか?そのようにそこには...少ない計算が必要である

+0

+1 - それは良い点ですが、私は1.2または1.17のスコアを仮定しています。実際には平均値なので、いつかは分数が関係します。 – nickf

18

柔軟なソリューション

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); 
+0

エレガントですが、いくつかの "$"がありません。 –

+0

ニース。しかし、私はいつも5の割合を必要としていることを知っているので、それのための一般的な機能を作成することは実際にはありません。ありがとうございます( – peirix

+0

)このソリューションでは浮動小数点エラーが発生します。 –

1

(すべてであれば)なぜ誰もが深く検査や変換が必要なソリューションを与えていますか? 0.2?次に:

round($n/0.2) * 0.2; // $n = 3.78/0.2 = 18.9 (=) 19 * 0.2 = 3.8 // 

次に:

round($n/5) * 5; // $n = 17/5 = 3.4 (=) 3 * 5 = 15 // 

これは簡単です。

+0

このソリューションで浮動小数点エラーが発生するため、このソリューションでは浮動小数点エラーが発生します。 –

関連する問題