在Ruby中将整数转换为带符号的字符串

时间:2010-03-05 19:25:55

标签: ruby integer

我有一份报告,其中列出了总值,然后是括号中的更改。 E.g:

歌曲:45(上周+10)

所以我想将整数10打印为“+10”,将-10打印为“-10”

现在我正在做

(song_change >= 0 ? '+' : '') + song_change.to_s

有更好的方法吗?

4 个答案:

答案 0 :(得分:26)

"%+d" % song_change

String#%根据字符串中的打印说明符格式化右侧。打印说明符“%d”表示十进制aka。整数,并且添加到打印说明符的“+”强制始终打印相应的符号。

您可以在Kernel#sprintfman 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