Rubygets.to_iを使用してハッシュ値内に小数を保持する方法
概要
私は持っている
price_input = gets.strip.to_i
そしてそれをハッシュの配列に追加しようとしています。配列への追加は機能しますが、.gets.strip.to_i では小数点以下が削除されます。小数点を削除せずに追加する方法はありますか?
さらに理解するために、( 価格: [整数] ) の既存のハッシュ配列があり、後でこれらの整数をコードと一緒に追加します。文字列と整数を追加できないため、 .to_i が必要です。
解決策
整数は浮動小数点数ではないため、浮動小数点数は財務表現を処理する方法としては不適切です。浮動小数点演算に関するさまざまな問題を抽象化してお金を処理するための宝石がありますが、単純なものを探しているだけの場合は次のようになります。
require "bigdecimal"
print "Enter a price: "
price_input = BigDecimal(gets)
puts "You entered $#{price_input.to_f.round 2}"
BigDecimal が自動的に処理してくれるため、入力をむしゃむしゃにしたり削除したりする必要さえありません。ただし、BigDecimal または Real は小数セントを正しく処理しますが、1 ペニーの小数部分を含むものは、精度 2 の Float に変換し直すときに何らかの丸め誤差を引き起こす可能性があることに注意してください。内部表現に関係なく、丸めをどうするかを決定する必要があります。