Самый быстрый и эффективный способ определения десятичного значения — целое число в Java.

StackOverflow https://stackoverflow.com/questions/1575052

  •  21-09-2019
  •  | 
  •  

Вопрос

Учитывая двойную переменную с именем sizeValue и sizeValue содержит что-то отличное от 0, каков наиболее эффективный способ определить это sizeValue содержит значение, которое является целым числом?

В настоящее время я использую

размерзначение % 1 == 0

какие-нибудь другие более быстрые способы?

Это было полезно?

Решение

попробовать Math.ceil:

private static boolean isInt(double x) {
     return x == Math.ceil(x);
}

РЕДАКТИРОВАТЬ

Я провел несколько тестов с помощью следующих методов:

private static boolean isInt1(double x) {
    return x == (int) x;
}

private static boolean isInt2(double x) {
    return x == Math.ceil(x);
}

private static boolean isInt3(double x) {
    return x % 1 == 0;
} 

isInt1 самый быстрый из них (на сундже 1.6)

Другие советы

Я не уверен, что это быстрее, но вы можете привести свой двойной тип к int и проверить равенство:

double d = 123.456;
boolean dIsAnInteger = (d == (int)d);

Предупреждение:вы бы рассмотрели 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 содержит что-то, что, по вашему мнению, должно быть целым числом, но это не так.

Поэтому я бы сделал свой метод немного медленнее (но более правильным), интегрировав дельту, например Юнит делает:

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top