Powiel możliwe:
How to resolve a Java Rounding Double issueJak porównać dwie wartości podwójne w Javie?
Proste porównanie dwóch wartości podwójnych w Javie stwarza pewne problemy. Rozważmy następujący prosty fragment kodu w Javie.
package doublecomparision;
final public class DoubleComparision
{
public static void main(String[] args)
{
double a = 1.000001;
double b = 0.000001;
System.out.println("\n"+((a-b)==1.0));
}
}
Powyższy kod wydaje się powrót true
, oceny ekspresji ((a-b)==1.0)
ale tak nie jest. Zamiast tego zwracana jest wartość false
, ponieważ ocena tego wyrażenia to 0.9999999999999999
, co do którego oczekuje się, że będzie to 1.0
, co nie jest równe 1.0
, dlatego warunek jest wartością boolean false
. Jaki jest najlepszy i sugerowany sposób na pokonanie takiej sytuacji?
Dzieje się tak, ponieważ double i float nie mogą wyrażać każdej wartości liczbowej. Używają przybliżenia, aby przedstawić wartość. – onit