R
Robert Brown
Hi all,
I'm doing some complex math which I need to be based on BigDecimal
accuracy (not Float). It seems that ruby defaults to Float when there's
a mixture of type in there, e.g.
Code :
1. irb(main):001:0> require 'bigdecimal'
2. => true
3. irb(main):002:0> a = 5.123
4. => 5.123
5. irb(main):003:0> b = BigDecimal("6.789")
6. => #<BigDecimal:8b4c0,'0.6789E1',8(8)>
7. irb(main):004:0> c = a * b
8. => 34.780047
9. irb(main):005:0> c.class
10. => Float
Is there a way I can force a BigDecimal outcome.
One way I guess would work is to make sure all args in the calculation
are BigDecimal, but that's a bit tiresome. For a start, I'd have to
type check each arg and convert to BigDecimal if it was not BigDecimal -
that's gotta be slow...
On a related note, how do I initalize a BigDecimal from a Float (without
converting to string first). How could I extend BigDecimal for this?
Thanks,
Rob
I'm doing some complex math which I need to be based on BigDecimal
accuracy (not Float). It seems that ruby defaults to Float when there's
a mixture of type in there, e.g.
Code :
1. irb(main):001:0> require 'bigdecimal'
2. => true
3. irb(main):002:0> a = 5.123
4. => 5.123
5. irb(main):003:0> b = BigDecimal("6.789")
6. => #<BigDecimal:8b4c0,'0.6789E1',8(8)>
7. irb(main):004:0> c = a * b
8. => 34.780047
9. irb(main):005:0> c.class
10. => Float
Is there a way I can force a BigDecimal outcome.
One way I guess would work is to make sure all args in the calculation
are BigDecimal, but that's a bit tiresome. For a start, I'd have to
type check each arg and convert to BigDecimal if it was not BigDecimal -
that's gotta be slow...
On a related note, how do I initalize a BigDecimal from a Float (without
converting to string first). How could I extend BigDecimal for this?
Thanks,
Rob