0

I have a form input to get a number (it is a price). It can be a decimal like 102,5. I have to compare it with an other decimal for exemple 102,6. How can handle this ? I don't want to use round() cause i get to compare exactly.

Charles
  • 50,943
  • 13
  • 104
  • 142
Mamadou
  • 2,177
  • 5
  • 31
  • 43

3 Answers3

8

You could compare the absolute (i.e., numerical) difference to an "epsilon" (your "tolerance" 1):

$epsilon = 0.01;
$diff = abs(102.5 - 102.6); // .1
if ($diff <= $epsilon) {
    // The numbers are equal
} else {
    // The numbers are not equal enough!
}

And, a little reading: "What Every Computer Scientist Should Know About Floating-Point Arithmetic" and "Comparing floating point numbers".

Also, you may find the follow SO questions (and answers!) interesting:


1 That's right: You get to decide what makes the two numbers equal. It could be 0.1 (making 1.1 equal to 1.0), 0.01 (1.02 ~ 1.03) etc.

Community
  • 1
  • 1
jensgram
  • 31,109
  • 6
  • 81
  • 98
4

Don't store prices as floats, use integers (store cents, not dollars).

user187291
  • 53,363
  • 19
  • 95
  • 127
0

Just make it decimal out of this format

$kinda_decimal = "102,5";
$kinda_decimal = floatval(str_replace(",",".",$kinda_decimal));

and compare it

Your Common Sense
  • 156,878
  • 40
  • 214
  • 345
  • okay ! the probleme is now when i choose the ( point ) it is not taken as a decimal coma ! I hope you understand ( am french)) – Mamadou Sep 14 '10 at 10:32