我有一份报告,其中列出了总值,然后是括号中的更改。 E.g:
歌曲:45(上周+10)
所以我想将整数10打印为“+10”,将-10打印为“-10”
现在我正在做
(song_change >= 0 ? '+' : '') + song_change.to_s
有更好的方法吗?
答案 0 :(得分:26)
"%+d" % song_change
String#%根据字符串中的打印说明符格式化右侧。打印说明符“%d”表示十进制aka。整数,并且添加到打印说明符的“+”强制始终打印相应的符号。
您可以在Kernel#sprintf或man page for sprinf中找到有关打印说明符的更多信息。
您可以通过传入数组来一次格式化多个内容:
song_count = 45
song_change = 10
puts "Songs: %d (%+d from last week)" % [song_count, song_change]
# => Songs: 45 (+10 from last week)
答案 1 :(得分:1)
您可以向Fixnum添加一个名为to_signed_s的方法,但这可能有点过分。然而,你会消除复制和粘贴,这将是好事。
Personall,我只是编写一个StringUtil类来处理转换。
或者,更好的OO解决方案是将FixNum包装在holder类中并覆盖THAT类的to_s。
IE:创建一个名为SignedFixnum的类,并在需要签名时将Fixnum对象包装在其中。
答案 2 :(得分:1)
韦恩已经发布了我认为最好的选择,但这是另一个只是为了好玩......
"#{'+' if song_change >= 0}#{song_change}"
答案 3 :(得分:0)
我认为您的原始代码很好,只需将其解压缩到帮助程序中,这样就不会使您的视图混乱,并且每次要使用它时都不必重复它。
将它放在您的application_helper.rb文件中,如下所示
def display_song_change
(song_change >= 0 ? '+' : '') + song_change.to_s
end