Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

String comparison of numbers

by dsb (Chaplain)
on Mar 09, 2006 at 15:08 UTC ( #535405=perlquestion: print w/replies, xml ) Need Help??
dsb has asked for the wisdom of the Perl Monks concerning the following question:

This issue came up because I was setting some values using the rand() function, then requesting them through a SOAP request where the were received as strings. A numeric comparison between two numers that were seemingly the same failed:
# these two variables are indentical when printed to STDOUT $var1 = rand(1); $var2 = $soapres->dataof('//path/to/elem/')->attr->{attr}; if ( $var1 == $var2 ) { print "all is well\n"; } else { print "got problems?\n"; }
The comparison invariably failed. However, when I did a string comparison, it succeeded.
# these two variables are indentical when printed to STDOUT $var1 = rand(1); $var2 = $soapres->dataof('//path/to/elem/')->attr->{attr}; if ( $var1 eq $var2 ) { print "all is well\n"; } else { print "got problems?\n"; }
I'm guessing that this has something to do with the internal representation of the value returned by rand(). I'm guessing that the value is stored internally with a greater precision, so the numeric comparison between that value and the "truncated" value fails.

Of course...this is just my theory.

This @ISA my( $cool ) %SIG

Replies are listed 'Best First'.
Re: String comparison of numbers
by philcrow (Priest) on Mar 09, 2006 at 15:21 UTC
    When comparing floating point numbers, you should either round them both to the same precision and compare or subtract one from the other and see if the abs of the result is small:
    if ( abs( $number1 - $number2 ) < $something_tiny ) { print "all is well.\n"; }
    Numerical analysts usually prefer the latter many programmers prefer the former.


      Well, the two arguements need to be exactly identical. So, if that means using a truncated version of the rand() value, then that's what I'll do. I'm more curious as to if my theory is correct.

      This @ISA my( $cool ) %SIG

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://535405]
Approved by Corion
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2017-02-21 19:21 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (316 votes). Check out past polls.