2011-09-19 9 views
7

現在、最も近いメジャー番号まで数字を丸める必要があります。 (右の用語はここにあるのかわからない)Javascriptインテリジェントな丸め

しかし、私は、私はこれを行うための方法が、そのように苦痛を実装し、数字だけを処理している

IE: 

13 // 20 
349 // 400 
5645 // 6000 
9892 // 10000 
13988 // 20000 
93456 // 100000 
231516 // 300000 

etc. etc. 

を達成しようとしているものの例を参照してください私はそれを上にしたい場合は、if文を追加する必要があります(ええ、どのように私はそれをimplmented参照してください:Pは私は非常に誇りに思っていませんが、脳がつかまっています)

そこに何かがある私がしたい丸めの種類の正しい言葉を知らない私のためにおそらく私を助けていない

+0

そして、私はガールフレンドを必要とするが、我々は仕事をしなければならないことがあり物事を完了するために!ロジックは250000の代わりに15000、231516-> 300000の代わりに500,13988-> 20000の代わりに349-> 400を持つロジックは何ですか? – Bakudan

+1

@Bakudan Tristanが投稿した例には論理があります。本質的には、数字を1桁の数字に簡略化し、常に切り上げます。 – cheeken

+0

@cheeken thatsより良い言葉は、私が使ったことです!重要な数字 – Tristan

答えて

13
<script type="text/javascript"> 
    function intelliRound(num) { 
     var len=(num+'').length; 
     var fac=Math.pow(10,len-1); 
     return Math.ceil(num/fac)*fac; 
    } 
    alert(intelliRound(13)); 
    alert(intelliRound(349)); 
    alert(intelliRound(5645)); 
    // ... 
</script> 

http://jsfiddle.net/fCLjp/

+0

エレガントに簡単!私の脳はうまくいきませんでした!ちょうどこれを見て私はこれを見逃してどのように迷っています! – Tristan

1

ここで説明するようにあなたは、Math.ceil機能を使用することができます。

javascript - ceiling of a dollar amount

を(彼らは2桁の数字を持っている場合)、右あなたが10でそれらを分割する必要がありますあなたの番号を取得するには、100(もし彼らが)3桁の数字を持っている、というように...

7

一つの方法を参照してください。

var a = [13, // 20 
349, // 400 
5645, // 6000 
9892, // 10000 
13988, // 20000 
93456, // 100000 
231516 // 300000 
] 

for (var i in a) { 
    var num = a[i]; 
    var scale = Math.pow(10, Math.floor(Math.log(num)/Math.LN10)); 
    print([ num, Math.ceil(num/scale) * scale ]) 
} 

13,20 
349,400 
5645,6000 
9892,10000 
13988,20000 
93456,100000 
231516,300000 
0

The answer from @rabuddeはうまく動作しますが、負の数を処理する必要があるもののために、ここで更新されたバージョンです:

function intelliRound(num) { 
 
    var len = (num + '').length; 
 
    var result = 0; 
 
    if (num < 0) { 
 
     var fac = Math.pow(10, len - 2); 
 
     result = Math.floor(num/fac) * fac; 
 
    } 
 
    else { 
 
     var fac = Math.pow(10, len - 1); 
 
     result = Math.ceil(num/fac) * fac; 
 
    } 
 
    return result; 
 
} 
 
alert(intelliRound(13)); 
 
alert(intelliRound(349)); 
 
alert(intelliRound(5645)); 
 
      
 
alert(intelliRound(-13)); 
 
alert(intelliRound(-349)); 
 
alert(intelliRound(-5645));