Answers:
显示时,您可以使用(例如)
>> '%.2f' % 2.3465
=> "2.35"
如果要四舍五入存储,可以使用
>> (2.3465*100).round / 100.0
=> 2.35
2.3000.round(2) => 2.3
和sprintf '%.2f', 2.300 => 2.30
。在我看来,这是round()的缺陷,或者应该有保留尾随零的选项。
2.3000.round(2)
是数字,而不是字符串。该数字与2.3
完全不同2.30
,因此没有办法保留尾随零。您可以创建自己的numbers_with_significance类,但是那时我们已经有了字符串。
'%.3f' % 1.2345
(3个小数位,而不是2个小数)!同样sprintf
也是如此。谨防。那将返回=> 1.234
不像 => 1.235
大多数人期望的那样(现在,小数点后第二位,sprintf 向下舍入5 ,而向上舍入6)。这就是为什么Kit Ho上面的评论有25多个投票的原因。使用起来更安全,'%.3f' % 1.2345.round(3)
因此先对数字进行适当的四舍五入.round
,然后再进行格式化(如果需要,可以使用尾随零)。
将参数传递给舍入,其中包含要舍入的小数位数
>> 2.3465.round
=> 2
>> 2.3465.round(2)
=> 2.35
>> 2.3465.round(3)
=> 2.347
1.1.round(2)
=> 1.1
not1.10
您可以在Float类中添加一个方法,我是从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
如果只需要显示它,我将使用number_with_precision帮助器。如果您在其他地方需要它,正如Steve Weet指出的,我会使用该round
方法
number_with_precision
是仅用于Rails的方法。
sprintf '%.2f', 2.3465
也可以。