Question
Existe-t-il dans Ruby des fonctionnalités / syntaxes permettant de comparer deux flottants avec delta? Quelque chose de semblable à assert_in_delta (attendu_float, actual_float, delta) à partir de test / unit mais en retournant Boolean?
La solution
(expected_float - actual_float).abs <= delta
Autres conseils
En fonction de votre application et de ce que vos valeurs en virgule flottante représentent réellement, il peut être judicieux de les convertir en Rationals avec une précision donnée. Alors, les comparaisons directes se comporteront toujours correctement puisque les Rationals ne sont que deux entiers.
Par exemple, si vous savez que vous traitez des montants en dollars américains, les stocker sous le nom amount.to_r.round (2)
permet des comparaisons exactes pour l'égalité.
Juste une pensée ... il n'est pas nécessaire que toutes les valeurs non entières soient des flottants inexactement représentés
vous pouvez également avoir besoin d'un calcul de tolérance relative / delta ??p>