--- title: "Rails migrations: decimal precision and scale" kind: article slug: rails-migrations-decimal-precision-and-scale created_at: 2012-08-28 tags: - Rails - migrations - postgresql --- I'm always confused when using `decimal` in a Rails migration. Normally I need to store a value that has 2 or 3 numbers behind the comma (or dot), or decimals. Let's say you have a `Product` model with a `discount_percentage` attribute. This attribute is currently an integer, only allowing non-decimal values. To allow 2 digit decimal values (e.g. `12.54`), you can mak the following migration: :::ruby change_column :products, :discount_percentage, :decimal, precision: 5, scale: 2 This will allow you to store values like `80.00`, `99.99` and `100.00`. There are five digits in the entire number and of those five, two decimals. It's not necessary so specify `precision` and `scale` as your database will then allow any decimal value it can store. Read more about the `decimal` data type in PostgreSQL here: [http://www.postgresql.org/docs/9.1/static/datatype-numeric.html][1] [1]: http://www.postgresql.org/docs/9.1/static/datatype-numeric.html