私はレールを少しいじっていて、奇妙なものを見つけました。金額の値を格納するために、アクティブ レコードが BigDecimal に変換する典型的な 10 進数データ型を使用します。私はこれが正確であると考え、浮動小数点演算の奇妙な振る舞いを避けることを考えました。しかし、99.99 を db に保存するとすべて正常に動作しますが、アクティブ レコードによってレコードが読み込まれると、精度が失われ、99.9899999999 のような値に変換されます。これは浮動小数点の問題のようです。
私はいくつかのテストを行い、この b = BigDecimal.new("99.99") のような BigDecimal を作成すると「クリーンな」変数になることがわかりましたが、この方法でビルドすると b = BigDecimal.new(99.99) は「クリーンでない」バージョンになります避けたいこと。
データベースからレコードをロードするときに、ActiveRecord が中間フロートを使用して BigDecimal を再構築すると思います。これは私が望んでいることではありません。回避できるかどうかを知りたいです。
Ruby バージョン 1.9.3p0 Rails 3.2.9 Sqlite 3.7.9