Ruby round to_int如果是整数

Eri*_*ght 27 ruby floating-point int

在ruby中,我想将float转换为int,如果它是一个整数.例如

a = 1.0
b = 2.5

a.to_int_if_whole # => 1
b.to_int_if_whole # => 2.5
Run Code Online (Sandbox Code Playgroud)

基本上我试图避免在任何没有小数的数字上显示".0".我正在寻找一种优雅(或内置)的方式

def to_int_if_whole(float)
  (float % 1 == 0) ? float.to_i : float
end
Run Code Online (Sandbox Code Playgroud)

Yeh*_*atz 50

一个简单的方法是:

class Float
  def prettify
    to_i == self ? to_i : self
  end
end
Run Code Online (Sandbox Code Playgroud)

那是因为:

irb> 1.0 == 1
=> true
irb> 1 == 1.0
=> true
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

irb> 1.0.prettify
=> 1

irb> 1.5.prettify
=> 1.5
Run Code Online (Sandbox Code Playgroud)


Pau*_*ess 47

单线冲刺......

sprintf("%g", 5.0)
=> "5"

sprintf("%g", 5.5)
=> "5.5"
Run Code Online (Sandbox Code Playgroud)


Eri*_*ght 5

这是最终以我希望的方式工作的解决方案:

class Float
  alias_method(:original_to_s, :to_s) unless method_defined?(:original_to_s)

  def is_whole?
    self % 1 == 0
  end

  def to_s
    self.is_whole? ? self.to_i.to_s : self.original_to_s
  end
end
Run Code Online (Sandbox Code Playgroud)

这样我可以根据需要更新is_whole?逻辑(我觉得tadman是最复杂的),它确保Float输出到字符串的任何地方(例如,在表单中)它看起来像我想要的方式(即,没有最后的零).

感谢大家的想法 - 他们真的很有帮助.