2010-09-14 7 views
0

J'ai une entrée de forme pour obtenir un nombre (c'est un prix). Cela peut être un nombre décimal comme 102,5. Je dois le comparer avec une autre décimale par exemple 102,6. Comment pouvez-vous gérer cela? Je ne veux pas utiliser round() parce que je peux comparer exactement.Comparer des décimales en PHP

Répondre

9

Vous pouvez comparer la absolute différence (c.-à-numérique) à un "epsilon" (votre "tolérance"):

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

Et, un peu de lecture: "What Every Computer Scientist Should Know About Floating-Point Arithmetic" et " Comparing floating point numbers ".

En outre, vous trouverez peut-être le suivi SO des questions intéressantes (et réponses!):


C'est vrai: Vous obtenez décider ce qui rend les deux nombres égaux. Il pourrait être 0.1 (faire 1.1 égal à 1.0), 0.01 (1.02 ~ 1.03), etc.

+0

tx i tester et je serai de retour – Mamadou

+0

tx! ne fonctionne pas encore – Mamadou

+0

@Mamadou Vos chiffres sont-ils valides? Que signifie 'var_dump()'? – jensgram

3

Ne pas stocker les prix flotteurs, entiers d'utilisation (cents magasins, pas de dollars).

+0

Bon point. N'a pas remarqué la partie "c'est un prix" dans la question :) – jensgram

+0

Fait certainement plus de sens en termes de prix de calcul. –

+0

tx je teste et je serai de retour – Mamadou

0

juste le rendre décimal de ce format

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

et comparer

+0

okay! le problème est maintenant quand je choisis le (point) il n'est pas pris comme un coma décimal! J'espère que tu comprends (je suis français) – Mamadou