2016-04-15 12 views
0

私はそれが理にかなっている場合最もコンパクトでエレガントで効率的な方法は、JavaScriptで最も近い5に丸めますか?

NearestFive(3) --> 5 
NearestFive(5) --> 0 
NearestFive(6) --> 5 

を行う機能が欲しいです。私が思い付くことができる最高は

function NearestFive (x) 
{ 
    var r = x % 5; 
    if (r == 0) return x; 
    else if (r > 2) return x + 5 - r; 
    else return x - r; 
} 

ですが、それは、効率を追加するためにこれらのステップを統合またはビットシフト演算を導入することが可能だ場合、私は思ったんだけど?例えば

r > 2r == 0を意味するので、2つの比較

  1. r == 0
  2. r > 2

を実行することは必要ではないかもしれません。

+5

検索しましたか?[この回答](http://stackoverflow.com/questions/18953384/javascript-round-up-to-next-multiple-of-5)と[この回答](http://stackoverflow.com/questions/10535817/javascript-round-up-and-down-to-the-nearest-5-then-find-a-common-denominator)と異なるこれを行う方法は、確かにそれらのいくつかは十分に効率的でなければなりませんか? – adeneo

+0

あなたのサンプルコードに示されている整数だけ? – Roberto

+0

'return((x + 2)/ 5)* 5;' – user3386109

答えて

5

「最も近いXに丸めます」という簡単な方法は、Xで割り、最も近い整数に丸め、次にXで再び乗算することです。

function NearestX(num, factor) { 
    return Math.round(num/factor)*factor; 
} 

これは、最も近い偶数小数部分を丸めるために働く

0

お使いのブラウザによっては、これは速く走ることができ(例えば、最も近い0.1。):私のブラウザのパフォーマンスで

function NearestFive5 (x) 
{ 
    return (((x+2)/5)>>0) * 5; 
} 

はと等しいですMath.round(x/5)*5がありますが、どちらも質問に投稿したバージョンよりもはるかに高速です。

関連する問題