2009-04-28 8 views
3

以下は、任意の大きな数字だけ百場所(related to this answer)に正確になることが保証されます:精度が.05になるように番号を取得する方法は?

public function round(sc:Number):Number 
{ 
    sc = sc * 100; 
    sc = Math.floor(sc); 
    sc = sc/100; 

    return sc; 
} 

0.05の精度に自分の番号を丸めるための最適な方法は何ですか?この結果を得るためにビットシフトで何か賢いことがありますか?例えば、私が希望:

3.4566を= 3.45

3.04232 = 3.05

3.09 = 3.1

3.32 = 3.3

答えて

6

:あなたは恐らくMath.roundを(使用したいと思うでしょう)の代わりにMath.floorの()、そうでない場合は、あなたのテストケース3.09意志3.05になります。

2

あなただけの* 100 * 20を変更することができますし、/100/20。しかし、なぜあなたは自然に一般化できるのでしょうか?

あなたはその後、20

編集で割る、ラウンド、20を掛けることができ

double floor(double in, double precision) { 
    return Math.floor(in/precision)*precision 
} 
//floor(1.07, 0.05) = 1.05 
+0

Math.floor()ではなくMath.round()である必要があります。 – Svante

+0

彼の例はフロアを使用していたので、私はフロアを使用しました。また、私はそれを明確にするために関数のフロアを呼び出したことに注意してください。 –

+0

負の数値に対して一貫した結果を得るには、Math.floor() – Alnitak

関連する問題