使用number_with_precision删除前导零

时间:2012-01-05 01:05:27

标签: ruby-on-rails number-formatting

我有一个跟踪玩家棒球统计数据的应用程序。我希望它显示没有前导零的击球平均值( .333 而不是 0.333 )。我一直在尝试使用number_with_precision而没有运气。

以下是我的观点中的一行:

<%= number_with_precision(@player.batting_average, :precision => 3, 
    :significant => true, :strip_insignificant_zeros => true) %>

以下是模型中的代码:

def batting_average
  self.hits / self.at_bats.to_f
end

基于number_with_precision Rails 3.1.3文档,:strip_insignificant_zeros仅适用于小数点后的零和:significant不会影响小数。我错过了一些简单的事吗?

3 个答案:

答案 0 :(得分:1)

没有。这是正确的行为。您可以编写一个以正确方式执行此操作的帮助程序,或者只添加gsub(/^0+/,'')

答案 1 :(得分:1)

有很多方法可以做到这一点,但要认识到的主要是你正在处理 float ,并且需要将其转换为字符串以使用像{{{{ 1}}和gsub

以下是一些想法:

[]

def to_ba self.to_s[1..-1] end

gsub

或者如果你想变得疯狂(这比其他任何东西更有乐趣):

def to_ba
  self.to_s.gsub(/^0+/, '')
end

这些都是可以在值的末尾添加的辅助方法,如下所示:

def to_ba
  self.to_s.reverse.chop.reverse
end

或者您可以将这些方法中的任何一种附加到您的通话结束,如下所示:

number_with_precision( stuff ).to_ba

但如果你计划将击球率平均值放在所有位置,我会使用助手

答案 2 :(得分:0)

http://www.ruby-forum.com/topic/136990

def trim_lead(n)
    self.gsub!(/^#{n}+/,'')
end