in reply to 5.35 != 5.35
To see the problem, add
printf("%.16e\n", $dollar1); printf("%.16e\n", $dollar2);
Never compare floating point numbers for equality. A lot of common numbers are periodic in binary so they cannot be stored exactly.
>perl -le"printf '%.16e', 0.1" 1.0000000000000001e-001 ^ |
You could round the number to two digits before comparing: (Probably should use something less expensive than sprintf)
if (sprintf('%.2f', $dollar1) ne sprintf('%.2f', $dollar2)) { print "$dollar1 != $dollar2\n"; }
You could work with cents instead of dollars. (Only convert back to dollars when printing)
if ($cents1 != $cents2)) { print $cents1/100, ' != ', $cents2/100, "\n"; }
|
|---|