# Decimals are being converted to Bigdecimals!

Hi all,

I’m working on a financial app, and have set up some columns in my
tables as decimals with precision => 8 and scale => 2. My migration
looks like:

``````change_column :lineitems, :price, :decimal, :precision =>
``````

8, :scale => 2
change_column :payments, :amount, :decimal, :precision =>
8, :scale => 2

I’ve run the migration and restarted the server. I also looked at the
Mysql tables to verify that the migration ran correctly, and the
fields look like they’re set up right ( DECIMAL(8,2) ).

The problem is that when I access these columns in the console, they
show up as Bigdecimal and it’s messing up my calculations. Here’s
what it looks like from the rails console:

Lineitem.find(34).price
=> #BigDecimal:31e4c74,‘0.3E4’,4(12)

Payment.find(23).amount
=> #BigDecimal:31b8480,‘0.4125E4’,4(12)

What’s going on here? How do I get Rails to recognize that these are
decimal/currency amounts???

On 1/19/08, Neal L [email protected] wrote:

8, :scale => 2
=> #BigDecimal:31e4c74,‘0.3E4’,4(12)

Payment.find(23).amount
=> #BigDecimal:31b8480,‘0.4125E4’,4(12)

What’s going on here? How do I get Rails to recognize that these are
decimal/currency amounts???

BigDecimal is just the Ruby class which represents decimal fixed point
numbers.

How is it “messing up your calculations?”

b = BigDecimal.new(“100”, 2)
=> #BigDecimal:13f4e6c,‘0.1E3’,4(8)
b.to_s
=> “100.0”
b + 1
=> #BigDecimal:13f0b8c,‘0.101E3’,4(12)
(b + 1).to_s
=> “101.0”

Rick DeNatale

My blog on Ruby