Techioz Blog

Ruby とお金、Rails アプリでお金の値を DB に保存するにはどうすればよいですか?

概要

Rails アプリに商品の価格を保存する際に、丸めの問題が発生しないようにしたいと考えています。

どの mysql データ型を使用すればよいですか? また、それは Rails で何にマップされますか?

精度を高めるために 10 桁の小数が必要です。

解決策

私は通貨を最低額面(ペンス、セントなど)の整数としてデータベースに保存し、これに対して計算を行うことを好みます。

add_column :product, :price, :integer

もちろん、フォームの入力と表示を人々が期待するフォームにする必要があるため、これを支援するためにモデルにいくつかのヘルパー メソッドを追加します。

class Product < ActiveRecord::Base
  def price_dollars
    self.price / 100
  end

  def price_dollars=(val)
    self.price = val * 100
  end
end

コンソールでは次の情報が得られます。

> prod = Product.new
=> [snip]

> prod.price_dollars = 12.93
=> 12.93
> prod.price
=> 1293
> prod.price_dollars
=> 12.93

> prod.price = 1691
=> 1691
> prod.price_dollars
=> 16.91

おそらくどこかにこれをうまく処理するプラグインがあると思います。