Внимание: Вы бы 0.9999999999999999
целое число? Возможно нет. Но смотреть на это:
double val = 0;
for(int i=0;i<10;i++)
System.out.println(val+=0.1);
Это печатает:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
Что является проблематичным, поскольку в конце программы val
содержит то, что вы думаете, должно быть целым числом, но это не так.
Так что я хотел бы сделать мой метод немного медленнее (но более правильно) путем интегрирования дельты как JUnit делает:
private static boolean isInt(double x, double delta) {
double ceil = Math.ceil(x);
return x-delta<ceil && x+delta>ceil;
}
и, конечно, обеспечить тот же метод, с разумным по умолчанию:
private static boolean isInt(double x) {
return isInt(x, 0.000000001);
}
Теперь isInt(val)
, наконец, возвращает true.
Это довольно быстро уже. – OscarRyz