Rails Tip: Precision and scale for decimals
For when you need that little bit of extra accuracy, specifying precision and scale for a decimal column in your Ruby on Rails migration is pretty simple. The precision represents the total number of digits in the number, whereas scale represents the number of digits following the decimal point. To specify the precision and scale, simply pass those as options to your column definition.
For example:
class AddLatLngToAddresses < ActiveRecord::Migration
def self.up
add_column :addresses, :lat, :decimal, :precision => 15, :scale => 10
add_column :addresses, :lng, :decimal, :precision => 15, :scale => 10
end
def self.down
remove_column :addresses, :lat
remove_column :addresses, :lng
end
end
This will allow you to have 10 digits after the decimal point and 15 digits max.
One thing to note, however is that Rails will use BigDecimal as the type for the column. BigDecimal provides support for very large or very accurate floating point numbers. Remember those pesky floating point imprecision errors?
>> 1.2 - 1.0 == 0.2
=> false
Yep, BigDecimal handles that…
>> BigDecimal.new('1.2') - BigDecimal.new('1.0') == BigDecimal.new('0.2')
=> true
So now, go forth and be accurate.
Also see
More of my rantings
- Installing aspell and raspell for Ultrasphinx
- Quick Tip: Route Associations
- Quick Tip: Override Rails Generated URLs
These might also interest you
- Outsourcing Killed By Django And Ruby On Rails (Aware Labs)
- How To Prepare For Ignite (Preston Lee)
- Outsourcing Revisited And No One Is Safe (Aware Labs)
Post a new comment
Displayed next to your comments.
Not displayed publicly.
If you have a website, link to it here.
Comments byIntenseDebate

Emerson· 40 weeks ago
Thanks for the clear explanation, quick and easy...