Warning: byłoby rozważyć 0.9999999999999999
liczbę całkowitą? Prawdopodobnie nie. Ale to patrzeć:
double val = 0;
for(int i=0;i<10;i++)
System.out.println(val+=0.1);
ten wypisuje:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
Który jest problematyczne, ponieważ pod koniec programu w val
zawiera coś, co naszym zdaniem powinno być liczbą całkowitą, ale nie jest.
Więc ja robię moją metodę nieco wolniej (ale bardziej poprawne) poprzez integrację deltę jak JUnit robi:
private static boolean isInt(double x, double delta) {
double ceil = Math.ceil(x);
return x-delta<ceil && x+delta>ceil;
}
i oczywiście zapewnić ten sam sposób z rozsądną domyślnie:
private static boolean isInt(double x) {
return isInt(x, 0.000000001);
}
Teraz isInt(val)
wreszcie zwraca wartość true.
To już dość szybko. – OscarRyz