tags:

views:

72

answers:

3

Hi everybody, 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.

+5  A: 

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.

jensgram
tx i test and i will be back
Mamadou
tx ! does not work yet
Mamadou
@Mamadou Are your numbers valid? What does `var_dump()` print?
jensgram
+2  A: 

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

stereofrog
Good point. Didn't notice the "it is a price" part in the question :)
jensgram
Definitely makes more sense in terms of computing prices.
ApoY2k
tx i test and i will be back
Mamadou
A: 

Just make it decimal out of this format

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

and compare it

Col. Shrapnel
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