Ruby小数点后没有任何零点

brg*_*brg 3 ruby floating-point

我已经搜索了很多,以获得我float在十进制后获得没有不需要的零值的确切要求.

Eg:  14.0 should be 14
     14.1 should be 14.1
Run Code Online (Sandbox Code Playgroud)

到目前为止我找到的最近可能的解决方案是使用sprintf():

irb(main):050:0> num = 123.0
=> 123.0
irb(main):051:0> sprintf('%g', num)
=> "123"
Run Code Online (Sandbox Code Playgroud)

这里的问题是我的num类型更改为StringFloat.我可以在不更改类型的情况下获得浮点值更改吗?

saw*_*awa 6

14.0.tap{|x| break x.to_i == x ? x.to_i : x}
# => 14

14.1.tap{|x| break x.to_i == x ? x.to_i : x}
# => 14.1
Run Code Online (Sandbox Code Playgroud)

  • 这甚至更好. (2认同)

Bro*_*tse 6

尝试:

class Float
  def try_integer
    to_i == self ? to_i : self
  end
end

14.2.try_integer    #=> 14.2
14.0.try_integer    #=> 14
Run Code Online (Sandbox Code Playgroud)


brg*_*brg 5

好吧,我通过 Sawa 和 BroiSatse 的答案得到了答案。

但我想以下内容足以满足我的要求:

irb(main):057:0> num = 14.0
=> 14.0
irb(main):058:0> num = num == num.to_i ? num.to_i : num
=> 14
irb(main):059:0> num = 14.1
=> 14.1
irb(main):060:0> num = num == num.to_i ? num.to_i : num
=> 14.1
Run Code Online (Sandbox Code Playgroud)