2017-07-20 38 views
0

例如,如果我想讓987等於「900」。我如何總是在Ruby中舍入一個數字?

+0

歡迎來到SO。我建議閱讀stackoverflow.com/help/how-to-ask。它會幫助你寫出可靠的問題,從而產生(希望)好的答案。你想讓這個數字下降併成爲一個字符串嗎? – orde

+0

你好,感謝您的熱烈歡迎!其實,我希望它是一個數字。 –

回答

6
n = 987 
m = 2 

n.floor(-m) 
    #=> 900 

參見Integer#floor:「當精度是否定的,則返回的值是與至少ndigits.abs尾隨零的整數。」

(n/10**m) * 10**m 
    #=> 900 
+0

'n.round(-m)'給我1,000而不是900.可以使用'n.floor(-m)',它更好地處理「負面情況」 –

+0

@SimpleLime,是的,我注意到'n。圓(米)',所以回滾到我原來的答案。我會添加你的建議。謝謝。 –

+1

不知道你可以將負面信息傳遞給這些方法,直到我看到你的信息,並且你已經在幾分鐘內來回地看到了一些變化,所以如果發佈我自己的答案,就會感到不誠實在你的答案的一些編輯歷史中的小細節 –

0

可以使用對數計算出最佳多的分。

def round_down(n) 
    log = Math::log10(n) 
    multip = 10 ** log.to_i 
    return (n/multip).to_i * multip 
    end 

    [4, 9, 19, 59, 101, 201, 1500, 102000].each { |x| 
    rounded = round_down(x) 
    puts "#{x} -> #{rounded}" 
    } 

結果:

4 -> 4 
9 -> 9 
19 -> 10 
59 -> 50 
101 -> 100 
201 -> 200 
1500 -> 1000 
102000 -> 100000 

這招是非常方便的,當你需要計算甚至打勾間距的圖形。