2009-02-25 36 views
20

第一個數字需要舍入到最接近的第二個數字。有很多方法可以做到這一點,但什麼是最好的和最短的算法?任何人都爲一個挑戰:-)舍入到最接近的100

1244-> 1200
1254-> 1300
123-> 100
178-> 200
1576-> 1600
1449-> 1400
123456- > 123500
654321-> 654300
23-> 00
83-> 100

+0

紅寶石應該罰款 – Senthoor 2009-02-25 07:06:34

回答

28

對於輸入n

(n + 50)/100 * 100 

使用整數除法。

請注意,許多語言/庫已經有這樣做的功能。

0

這是功課?

一般來說,mod 100,那麼如果> 50 add else則減去。

+0

無其不在家工作:-) – Senthoor 2009-02-25 06:54:41

+0

搞什麼鬼布賴恩! mod和if-then-else會很慢。如果你使用整數檢查大衛的答案。這是解決這個問題的分支機構少見的常用方法。它也適用於浮點數字。 – 2009-02-25 06:55:15

+0

我自己在Ruby中提出了這個答案。 numbers.each {| number | puts number +' - >'+ number.gsub(/ \ d \ d \ d $ /,(number [number.size-3,1] .to_i + number [number.size-2,1] .to_i/5 ).to_s + '00')} – Senthoor 2009-02-25 07:05:51

2

這將做到這一點,你正在使用整數運算給出:

n = (n + 50)/100 * 100 

當然,你沒有指定的例如,1350和1450的行爲,所以我當選圍捕。如果你需要全面的平衡,那就行不通了。

6
100 * round(n/100.0) 
4

我知道這是在遊戲中後期,但這裏的東西我一般設置,當我處理有圓的東西到最近的NTH:

Number.prototype.roundTo = function(nTo) { 
    nTo = nTo || 10; 
    return Math.round(this * (1/nTo)) * nTo; 
} 
console.log("roundto ", (925.50).roundTo(100)); 

Number.prototype.ceilTo = function(nTo) { 
    nTo = nTo || 10; 
    return Math.ceil(this * (1/nTo)) * nTo; 
} 
console.log("ceilTo ", (925.50).ceilTo(100)); 

Number.prototype.floorTo = function(nTo) { 
    nTo = nTo || 10; 
    return Math.floor(this * (1/nTo)) * nTo; 
} 
console.log("floorTo ", (925.50).floorTo(100)); 

我發現使用數自己.ceilTo(..),因爲我正在使用Canvas並試圖脫身以確定可以擴展多少。

48

Ruby的圓形方法可以消耗負精度:

n.round(-2)

在這種情況下-2讓你四捨五入到最接近的百位。

0

按照上述爬完皮萊的評論,四捨五入到最接近的百分位數在Javascript:
100 * Math.floor((foo + 50)/100);