第一個數字需要舍入到最接近的第二個數字。有很多方法可以做到這一點,但什麼是最好的和最短的算法?任何人都爲一個挑戰:-)舍入到最接近的100
1244-> 1200
1254-> 1300
123-> 100
178-> 200
1576-> 1600
1449-> 1400
123456- > 123500
654321-> 654300
23-> 00
83-> 100
第一個數字需要舍入到最接近的第二個數字。有很多方法可以做到這一點,但什麼是最好的和最短的算法?任何人都爲一個挑戰:-)舍入到最接近的100
1244-> 1200
1254-> 1300
123-> 100
178-> 200
1576-> 1600
1449-> 1400
123456- > 123500
654321-> 654300
23-> 00
83-> 100
對於輸入n
:
(n + 50)/100 * 100
使用整數除法。
請注意,許多語言/庫已經有這樣做的功能。
這是功課?
一般來說,mod 100,那麼如果> 50 add else則減去。
無其不在家工作:-) – Senthoor 2009-02-25 06:54:41
搞什麼鬼布賴恩! mod和if-then-else會很慢。如果你使用整數檢查大衛的答案。這是解決這個問題的分支機構少見的常用方法。它也適用於浮點數字。 – 2009-02-25 06:55:15
我自己在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
這將做到這一點,你正在使用整數運算給出:
n = (n + 50)/100 * 100
當然,你沒有指定的例如,1350和1450的行爲,所以我當選圍捕。如果你需要全面的平衡,那就行不通了。
100 * round(n/100.0)
我知道這是在遊戲中後期,但這裏的東西我一般設置,當我處理有圓的東西到最近的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並試圖脫身以確定可以擴展多少。
Ruby的圓形方法可以消耗負精度:
n.round(-2)
在這種情況下-2讓你四捨五入到最接近的百位。
按照上述爬完皮萊的評論,四捨五入到最接近的百分位數在Javascript:
100 * Math.floor((foo + 50)/100);
紅寶石應該罰款 – Senthoor 2009-02-25 07:06:34