1

既存のテーブルのrailsモデルクラスを作成しました。一部のテーブルフィールドは、Postgres DBでnumeric(19,2)として定義されている10進フィールドです。Railsコンソールを開いて、次のようなオブジェクトの1つをフェッチすると、次のようになります。

 ExistingTableModel.first.total
 #<BigDecimal:4bfd250,'0.692E3',9(18)>

だから、私はBigDecimal 9(18)を取得しています。これは問題です。なぜなら、私がそのような合計などを行うと、四捨五入のために結果が良くないからです。

レールにこれらのフィールドを小数点以下2桁のBigDecimalにマップさせるにはどうすればよいですか?

ありがとう!

4

2 に答える 2

2

属性アクセサーをオーバーライドできます。属性foonumeric(19,2)を持つレガシーPostgresテーブルがあるとします

model ExistingTableModel < ActiveRecord::Base
  def foo
    read_attribute(:foo).round(2)
  end
end

これにより、foo属性へのすべてのアクセスが小数点以下2桁の精度に丸められます。

于 2012-09-17T22:32:00.823 に答える
1

モデルの関連するテーブル列の精度とスケールのオプションを使用します。

ドキュメントから:

精度は有効桁数であり、目盛りは小数点以下の桁数です。たとえば、数値123.45の精度は5で、スケールは2です。精度が5でスケールが2の小数の範囲は-999.99から999.99です。

PostgreSQL::precision [1..infinity]、:scale[0..infinity]。デフォルトはありません。

完全なAPIリファレンス

于 2012-09-17T22:33:19.073 に答える