Ruby: Ruby 中的舍入浮动

我在四舍五入方面有点问题。我有一个浮点数,我想四舍五入到小数点后的百分之一。但是,我只能使用 .round,它基本上把它变成了一个 int,意思是 2.34.round # => 2.。有没有一种简单的效果方法来做类似 2.3465 # => 2.35的事情

159304 次浏览

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

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

如果要将其存储为圆形,可以使用

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

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

传递一个四舍五入的参数,该参数包含要四舍五入的小数位数

>> 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

对于 ruby 1.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

如果您只需要显示它,我将使用 Number _ with _ Precision助手。 如果你在其他地方需要它,我会使用,正如 Steve Weet 所指出的,round方法

您还可以提供一个负数作为 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

你可以用这个四舍五入到一个精度。。

//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