Ну, вы можете использовать:
if (x == Math.floor(x))
или даже:
if (x == (long) x) // Performs truncation in the conversion
Если условие истинно, т.е. выполняется тело оператора if
, то значениеявляется целым числомВ противном случае это не так.
Обратите внимание, что при этом значение 1.00000000001 будет по-прежнему двойным - если это значения, которые были вычислены (и поэтому могут быть просто "очень близки" к целочисленным значениям)Вы можете добавить немного терпимости.Также обратите внимание, что это приведет к ошибке для очень больших целых чисел, так как они все равно не могут быть точно представлены в double
- вы можете рассмотреть возможность использования BigDecimal
вместо этого, если вы имеете дело с очень широким диапазоном.
РЕДАКТИРОВАТЬ: Есть лучшие способы приблизиться к этому - используя DecimalFormat
, вы сможете получить его только для опционально для получения десятичной точки.Например:
import java.text.*;
public class Test
{
public static void main(String[] args)
{
DecimalFormat df = new DecimalFormat("0.###");
double[] values = { 1.0, 3.5, 123.4567, 10.0 };
for (double value : values)
{
System.out.println(df.format(value));
}
}
}
Вывод:
1
3.5
123.457
10