Don't convert to a float unless we need it.  If we are already a Numeric we can induce issues, for example:

irb(main):026:0> d
=> #<BigDecimal:132713fa,'322.4',4(20)>
irb(main):027:0> d.to_f
=> 322.4
irb(main):028:0> d.to_f * 100
=> 32239.999999999996
irb(main):029:0> d * 100
=> #<BigDecimal:7f39e4a3,'32240.0',4(20)>