ユーザは文字列'67.99'
を入力します。私は最終的にこれを整数6799
に変換する必要があります。セントラルへのRubyフロート変換
つまり、string
で入力した通貨額をinteger
データタイプでセントに変換します。
私はこの問題が発生したことに気づく:
('67.99'.to_f * 100).to_i
#=> 6798
振る舞いを期待されていません。私は6798
ではなく、6799
という名前で保存する必要があります。
問題は100で、このフロート数を乗算します
'67.99'.to_f * 100
#=> 6798.999999999999
質問:どのように私は適切に小数を変換することができますが、整数に、文字列として入力されましたか?
例入力と出力:IMO
'67' #=> 6700
'67.' #=> 6700
'67.9' #=> 6790
'67.99' #=> 6799
:私はフロートが壊れていないことを認識していますので、これはthis questionの複製ではありません。
金額を表すために浮動小数点数を使用しないでください。 '0.10 + 0.20'を計算するとどうなるか試してみてください... – spickermann
状況に応じて[BigDecimal](http://ruby-doc.org/stdlib-2.3.1/libdoc/bigdecimal/rdoc/BigDecimal.html)もあります'BigDecimal.new('67 .99 ')' – tadman
@spickermann私は浮動小数点数の計算を何もしていません。私は、通貨形式で入力された文字列値を取り出し、それをセンテンスとしてデータベースに保存します。一度そこに:私はそれが整数/セントとして格納された量の数学的計算を行うことは安全であることを知っています。すべての数学的計算はデータベースの整数値に基づいています。それを整数値に適切に変換するだけです。 – Neil