значение с плавающей точкой является целым числом, если она равна его усечение:
public boolean isInteger(double x)
{
return x == (int) x;
}
Однако помните, что числа с плавающей запятой часто имеют округления вопросы, которые вызывают странные результаты. Например, вы можете выполнить некоторую математику и в итоге получить значение (например) 1.00000000001, когда правильный ответ без ошибок округления равен 1. Если вы пройдете такой номер до isInteger()
выше, он вернет false
. Если это вызывает беспокойство, вам нужно выполнить проверку «достаточно близко», используя параметр допуска.
Может быть что-то вроде этого, хотя я предполагаю, что это может быть улучшено:
// test if x is "closer than epsilon" to an integer
// typical value for epsilon might be, say, 0.000001
public boolean isInteger(double x, double epsilon)
{
double delta = Math.Abs(x - (int) x);
delta -= (int) delta;
return delta < epsilon;
}
Вы всегда будет делить на десять? – iamthereplicant
Я деляю только один раз, так как хочу увидеть, имеет ли число остаток или нет. – user3123254
Возможно ли дублировать? http://stackoverflow.com/questions/9898512/how-to-test-if-a-double-is-an-integer –