在Ruby中舍入浮点数

时间:2010-01-13 03:38:34

标签: ruby-on-rails ruby rounding

我有问题四舍五入。我有一个浮点数,我想要舍入到十进制的十分之一。但是,我只能使用.round基本上将其转换为int,这意味着2.34.round # => 2.是否有一种简单的效果方法可以执行2.3465 # => 2.35

之类的操作

8 个答案:

答案 0 :(得分:380)

将参数传递给包含要舍入的小数位数的回合

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

答案 1 :(得分:174)

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

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

如果要将其四舍五入,可以使用

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

答案 2 :(得分:7)

你可以在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

答案 3 :(得分:7)

你可以用它来四舍五入..

 #123 some thig been done
#some comments here
-->list of changelist here

答案 4 :(得分:2)

(2.3465*100).round()/100.0怎么办?

答案 5 :(得分:2)

def rounding(float,precision)
    return ((float * 10**precision).round.to_f) / (10**precision)
end

答案 6 :(得分:1)

如果您只是需要显示它,我会使用number_with_precision帮助器。 如果你需要它,我会使用,正如Steve Weet指出的那样,round方法

答案 7 :(得分:0)

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