what's easiest way to compare a Float & BigDecimal (i.e. like a equals
mechanism)? It seems that "==" does NOT work as they are different
types. Is there a way to do a comparison without having to convert
types?
what's easiest way to compare a Float & BigDecimal (i.e. like a equals
mechanism)? It seems that "==" does NOT work as they are different
types. Is there a way to do a comparison without having to convert
types?
?> a
=> #<BigDecimal:2395e98,'0.65E1',8(8)>
x
=> 6.5
a == x
=> false #<<== DIDN'T WORK
tks
It works fine for me. If I do something like this:
f = 0.1
b = BigDecimal.new('0.1')
puts 'yes' if f == b
It will return true. I've always stayed clear of the equality operator with floating point numbers. Floating point cannot represent all numbers exactly, so comparing it with something like a BigDecimal (which can represent all numbers exactly) might be problematic.
Actually, there is none. Why don't you just let Ruby do the job and
multiply the bigdecimal with 1.0 when comparing? Also, as previously
noted, == operator with floats is not ... reliable.
br,
pen
···
On Nov 8, 8:26 am, Greg Hauptmann <greg.hauptmann.r...@gmail.com> wrote:
Hi,
what's easiest way to compare a Float & BigDecimal (i.e. like a equals
mechanism)? It seems that "==" does NOT work as they are different
types. Is there a way to do a comparison without having to convert
types?
With the approx_equal? method in that thread, this works:
a = BigDecimal.new('6.5')
f = 6.5
f == a
#=> false
f.approx_equal?(a, 0.00000000001)
#=> true
-- Mark.
···
On Nov 8, 1:26 am, Greg Hauptmann <greg.hauptmann.r...@gmail.com> wrote:
Hi,
what's easiest way to compare a Float & BigDecimal (i.e. like a equals
mechanism)? It seems that "==" does NOT work as they are different
types. Is there a way to do a comparison without having to convert
types?
?> a
=> #<BigDecimal:2395e98,'0.65E1',8(8)>>> x
=> 6.5
>> a == x
that works - but my 6.5 number doesn't work - does the following also
not work for you?
a = BigDecimal.new('6.5')
=> #<BigDecimal:238875c,'0.65E1',8(8)>
b = 6.5
=> 6.5
a == b
=> false
a.class
=> BigDecimal
b.class
=> Float
···
On Sat, Nov 8, 2008 at 5:03 PM, Michael Morin <uzimonkey@gmail.com> wrote:
Greg Hauptmann wrote:
Hi,
what's easiest way to compare a Float & BigDecimal (i.e. like a equals
mechanism)? It seems that "==" does NOT work as they are different
types. Is there a way to do a comparison without having to convert
types?
?> a
=> #<BigDecimal:2395e98,'0.65E1',8(8)>
x
=> 6.5
a == x
=> false #<<== DIDN'T WORK
tks
It works fine for me. If I do something like this:
f = 0.1
b = BigDecimal.new('0.1')
puts 'yes' if f == b
It will return true. I've always stayed clear of the equality operator with
floating point numbers. Floating point cannot represent all numbers
exactly, so comparing it with something like a BigDecimal (which can
represent all numbers exactly) might be problematic.
oh so convert the BigDecimal to a float by multiplying by 1.0 you mean first?
···
On Sun, Nov 9, 2008 at 6:12 AM, pen <pyeniemi@gmail.com> wrote:
On Nov 8, 8:26 am, Greg Hauptmann <greg.hauptmann.r...@gmail.com> > wrote:
Hi,
what's easiest way to compare a Float & BigDecimal (i.e. like a equals
mechanism)? It seems that "==" does NOT work as they are different
types. Is there a way to do a comparison without having to convert
types?
Actually, there is none. Why don't you just let Ruby do the job and
multiply the bigdecimal with 1.0 when comparing? Also, as previously
noted, == operator with floats is not ... reliable.
You can rely on comparing floating point numbers for less than or
greater than only.
You can not reliably compare floating point numbers for equality period.
···
On Sat, Nov 8, 2008 at 2:44 PM, Greg Hauptmann <greg.hauptmann.ruby@gmail.com> wrote:
that works - but my 6.5 number doesn't work - does the following also
not work for you?
a = BigDecimal.new('6.5')
=> #<BigDecimal:238875c,'0.65E1',8(8)>
b = 6.5
=> 6.5
a == b
=> false
a.class
=> BigDecimal
b.class
=> Float
--
In a world without walls who needs Windows (or Gates)? Try Linux instead!
oh so convert the BigDecimal to a float by multiplying by 1.0 you mean first?
Hi,
what's easiest way to compare a Float & BigDecimal (i.e. like a equals
mechanism)? It seems that "==" does NOT work as they are different
types. Is there a way to do a comparison without having to convert
types?
Actually, there is none. Why don't you just let Ruby do the job and
multiply the bigdecimal with 1.0 when comparing? Also, as previously
noted, == operator with floats is not ... reliable.
br,
pen
BigDecimal objects should have a to_f method. Using that would probably be more clear than multiplying by 1.0 (a seamingly meaningless thing to do).
···
On Sun, Nov 9, 2008 at 6:12 AM, pen <pyeniemi@gmail.com> wrote:
On Nov 8, 8:26 am, Greg Hauptmann <greg.hauptmann.r...@gmail.com> >> wrote: