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)
这是最终以我希望的方式工作的解决方案:
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输出到字符串的任何地方(例如,在表单中)它看起来像我想要的方式(即,没有最后的零).
感谢大家的想法 - 他们真的很有帮助.