在Ruby中舍入浮动

我有四舍五入的问题。 我有一个浮点,我想四舍五入到十进制的百分之一。 但是,我只能使用。 .round ,基本上把它变成一个整数,这意味着2.34.round # => 2.是否有一个简单的效果方式来做类似2.3465 # => 2.35

显示时,可以使用(例如)

 >> '%.2f' % 2.3465 => "2.35" 

如果你想存储它舍入,你可以使用

 >> (2.3465*100).round / 100.0 => 2.35 

将parameter passing给包含小数位数的舍入

 >> 2.3465.round => 2 >> 2.3465.round(2) => 2.35 >> 2.3465.round(3) => 2.347 

你可以在Float Class中添加一个方法,我从stackoverflow中学到了这一点:

 class Float def precision(p) # Make sure the precision level is actually an integer and > 0 raise ArgumentError, "#{p} is an invalid precision level. Valid ranges are integers > 0." unless p.class == Fixnum or p < 0 # Special case for 0 precision so it returns a Fixnum and thus doesn't have a trailing .0 return self.round if p == 0 # Standard case return (self * 10**p).round.to_f / 10**p end end 
 def rounding(float,precision) return ((float * 10**precision).round.to_f) / (10**precision) end 

那么(2.3465*100).round()/100.0呢?

你可以使用这个四舍五入的精度..

 //to_f is for float salary= 2921.9121 puts salary.to_f.round(2) // to 2 decimal place puts salary.to_f.round() // to 3 decimal place 

您也可以提供一个负数作为round方法的参数,四舍五入到最接近的倍数10,100等等。

 # Round to the nearest multiple of 10. 12.3453.round(-1) # Output: 10 # Round to the nearest multiple of 100. 124.3453.round(-2) # Output: 100 

如果你只需要显示它,我会使用number_with_precision助手。 如果你需要的话,我可以像Steve Weet指出的那样使用round方法

对于ruby1.8.7,你可以添加以下代码:

 class Float alias oldround:round def round(precision = nil) if precision.nil? return self else return ((self * 10**precision).oldround.to_f) / (10**precision) end end end