2011-08-29 1114 views
8

我需要四捨五入到最接近的十分之一。我需要的是ceil,但精確到小數點後一位。四捨五入到最接近的十分之一?

例子:

10.38 would be 10.4 
10.31 would be 10.4 
10.4 would be 10.4 

所以,如果它是過去一個完整的第十任何金額,應四捨五入。

我正在運行Ruby 1.8.7。

回答

26

這工作一般:

ceil(number*10)/10 

因此在Ruby中它應該是這樣的:

(number*10).ceil/10.0 
+1

這是我做的,但我希望有這樣做原生方式,像綜合報道(1)或其他。 – mjnissim

+0

你將如何完成這個小數點後兩位(如錢?)編輯:德皮。 (3.191 * 100).ceil/100.0給我3.2。這是正確的,3.20。只是沒有顯示額外的0. – gregblass

3

如果你的ActiveSupport可用,它增加了一個圓形的方法:

3.14.round(1) # => 3.1 
3.14159.round(3) # => 3.142 

來源如下:

def round_with_precision(precision = nil) 
    precision.nil? ? round_without_precision : (self * (10 ** precision)).round/(10 ** precision).to_f 
end 
+8

這輪到最近的十分之一,而不是最接近OP的要求的十分之一。 – brittohalloran

5

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

10.38.round(1) # => 10.4 

在這種情況下,1讓你四捨五入到最接近的十分之一。

+0

我推薦1.9.3及以上版本的答案(http://ruby-doc.org/core-1.9.3/Float.html#method--round)。 Ruby 1.8.7和更低版本只能舍入到整數值(http://ruby-doc.org/core-1.8.7/Float.html#method--round)。 – GSP

+2

10.31.round(1)=> 10.3而不是10.4,正如OP所要求的。 – Anjan

2

圍捕在紅寶石最近的十分之一,你可以做

(number/10.0).ceil*10

(12345/10.0).ceil*10#=> 12350