

以下のような値にしたいです  
10.0 →10  
1.5→1.5

以下のような処理でvalue=1.0ではなく、value=1となるようにはなったのですが、  
もっと良い方法はありますでしょうか？

[code]

    value = 10.0 / 10（何らかの計算）
    if value == value.to_i
      value = value.to_i
    end
    
[/code]


CC BY-SA 4.0
2019-04-11T07:10:47.060
54088
2019-04-11T21:46:39.460
12842
question
ruby
Rubyで小数点以下の数字が0の場合は削除したいのですがよい方法はありますか？


コメントにあるように「計算は浮動小数点の型で行い、計算結果が整数で表せるものであれば、小数点以下の「0」を消したい」「最終的にはstring型にしたい」と言うことであれば、表示、あるいは文字列への変換の際に書式指定をしてやるのが良いでしょう。

[code]

    irb(main):008:0> value = 10.0 / 10
    => 1.0
    irb(main):009:0> str_value = "%.15g"%value
    => "1"
    irb(main):010:0> print(str_value)
    1=> nil
    irb(main):011:0> 
    
[/code]

実行例はirbによるものなので、`=>
式の値`なんて余計なものが付いていますが、文字列型の`str_value`の値には、`.0`なんて含まれていないのは確認いただけると思います。

`to_s`でデフォルトの書式で文字列化してしまうと希望通りの文字列にならないことはよくありますが、その場合には数値型のまま値をいじってなんとかしようなんて思わずに、さっさと書式を指定した方が良いですね。


CC BY-SA 4.0
2019-04-11T11:49:56.563
54099
2019-04-11T11:49:56.563
13972
54088
answer


`ActiveSupport`を使った方法はどうでしょうか。

[code]

    require "active_support"
    require "active_support/number_helper"
    
    ActiveSupport::NumberHelper.number_to_rounded(1.0, strip_insignificant_zeros: true)
    #=> "1"
    ActiveSupport::NumberHelper.number_to_rounded(1.5, strip_insignificant_zeros: true)
    #=> "1.5"
    
[/code]

<https://www.rubydoc.info/docs/rails/4.0.0/ActiveSupport%2FNumberHelper:number_to_rounded>


CC BY-SA 4.0
2019-04-11T21:46:39.460
54105
2019-04-11T21:46:39.460
3271
54088
answer