On Sat, Aug 22, 2015 at 4:26 PM, hw <h...@gartencenter-vaehning.de> wrote: > > Hi, > > I have the following in a perl script: > > > if ($a != $b) { > print "e: '$a', t: '$b'\n"; > } > > > That will print: > > e: '69.99', t: '69.99' > > > When I replace != with ne (if ($a ne $a) {), it doesn't print. > > > Is that a bug or a feature? And if it's a feature, what's the explanation? > > And how do you deal with comparisions of variables when you get randomly > either correct results or wrong ones? It's randomly because this statement > checks multiple values in the script, and 69.99 is the only number showing > up yet which isn't numerically equal to itself (but equal to itself when > compared as strings). >
Perl Cookbook, 2nd edition, suggests these two approaches to comparing floats for equality. (1). Use sprintf to format the numbers to a certain number of decimal places, then compare the resulting strings. (2). Alternatively, store the numbers as integers by assuming the decimal place.