Можно ли это сделать?
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
}
Я знаю , что код , вероятно , ничего подобного не идти, но как же оно делось?
double
иint
представлены в памяти по-разному, и вы будете использовать один или другой в зависимости от контекста обработки вашей памяти.Ответы:
Это проверяет, совпадает ли округленное значение double с двойным.
Ваша переменная может иметь значение типа int или double и
Math.floor(variable)
всегда иметь значение типа int, поэтому, если ваша переменная равна,Math.floor(variable)
она должна иметь значение int.Это также не работает, если значение переменной бесконечно или отрицательно бесконечно, следовательно, добавляя «пока переменная не бесконечна» к условию.
источник
int
if, еслиif
оцениватьtrue
.Или вы можете использовать оператор по модулю:
(d % 1) == 0
источник
Math.rint(d)
?d
в C и C ++.Гуава:
DoubleMath.isMathematicalInteger
. (Раскрытие: я написал это.) Или, если вы еще не импортируете Guava,x == Math.rint(x)
это самый быстрый способ сделать это;rint
заметно быстрее, чемfloor
илиceil
.источник
источник
Попробуйте так,
например:
следовательно, 12.9 не является целым числом, тем не менее
следовательно, 12.0 является целым числом
источник
Вот версия для
Integer
иDouble
:Чтобы преобразовать
Double
вInteger
:источник
Рассматривать:
Это прилипает к ядру Java и позволяет избежать сравнения на равенство между значениями с плавающей запятой (
==
), что представляется неверным. ЭтоisFinite()
необходимо, так какrint()
будут проходить значения бесконечности.источник
Лучший способ с оператором модуля
источник
Вот хорошее решение:
источник
(bool)
актерский состав?Аналогично ответу SkonJeet выше, но производительность лучше (по крайней мере, в Java):
источник
источник
Вы можете попробовать следующим образом: получить целочисленное значение типа double, вычесть его из исходного значения double, определить диапазон округления и проверить, является ли абсолютное число нового значения double (без целочисленной части) больше или меньше вашего определенный диапазон если оно меньше, вы можете указать это целочисленное значение. Пример:
Если вы присвоите d значение 33.15, метод вернет true. Чтобы получить лучшие результаты, вы можете назначить более низкие значения для testRange (как 0.0002) на ваше усмотрение.
источник
Лично я предпочитаю простое решение по модулю в принятом ответе. К сожалению, SonarQube не любит тесты на равенство с плавающей запятой без установки точности округления. Поэтому мы попытались найти более подходящее решение. Вот:
Remainder(BigDecimal)
возвращаетBigDecimal
значение которого является(this % divisor)
. Если это равно нулю, мы знаем, что с плавающей запятой нет.источник
Мое простое решение:
источник
Вот решение:
источник