我有一个跟踪玩家棒球统计数据的应用程序。我希望它显示没有前导零的击球平均值( .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不会影响小数。我错过了一些简单的事吗?
答案 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