Как проверить, является ли double целым числом - PullRequest
138 голосов
/ 28 марта 2012

Возможно ли это сделать?

double variable;
variable = 5;
/* the below should return true, since 5 is an int. 
if variable were to equal 5.7, then it would return false. */
if(variable == int) {
    //do stuff
}

Я знаю, что код, вероятно, ничего подобного не делает, но как делает это происходит?

Ответы [ 14 ]

0 голосов
/ 03 мая 2019

Лучший способ с оператором модуля

if(val % 1 == 0)
0 голосов
/ 23 июня 2017

Лично я предпочитаю простое решение по модулю в принятом ответе.К сожалению, SonarQube не любит тесты на равенство с плавающей запятой без установки точности округления.Поэтому мы попытались найти более подходящее решение.Вот оно:

if (new BigDecimal(decimalValue).remainder(new BigDecimal(1)).equals(BigDecimal.ZERO)) {
    // no decimal places
} else {
    // decimal places
}

Remainder(BigDecimal) возвращает BigDecimal со значением (this % divisor).Если он равен нулю, мы знаем, что с плавающей запятой нет.

0 голосов
/ 14 ноября 2016

Вот решение:

float var = Your_Value;
if ((var - Math.floor(var)) == 0.0f)
{
    // var is an integer, so do stuff
}
0 голосов
/ 18 марта 2014

вы можете попробовать следующим образом: получить целочисленное значение типа double, вычесть его из исходного значения double, определить диапазон округления и проверить, больше ли абсолютное число нового значения double (без целочисленной части), или меньше, чем ваш определенный диапазон. если оно меньше, вы можете указать это целочисленное значение. Пример:

public final double testRange = 0.2;

public static boolean doubleIsInteger(double d){
    int i = (int)d;
    double abs = Math.abs(d-i);
    return abs <= testRange;
}

Если вы присвоите d значение 33.15, метод вернет true. Чтобы получить лучшие результаты, вы можете назначить более низкие значения для testRange (как 0.0002) на ваше усмотрение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...