преобразование double в целое число в Java - PullRequest
106 голосов
/ 24 июня 2011

В Java я хочу преобразовать double в целое число, я знаю, если вы сделаете это:

double x = 1.5;
int y = (int)x;

, вы получите y = 1.Если вы сделаете это:

int y = (int)Math.round(x);

Скорее всего, вы получите 2. Однако мне интересно: так как двойные представления целых чисел иногда выглядят как 1.9999999998 или что-то еще, есть ли вероятность, что приведение двойного числа создано с помощью Math.round () будет по-прежнему приводить к усеченному числу вниз, а не к искомому округленному числу (т.е.: 1 вместо 2 в представленном коде)?

(и да, я имею в виду этотаким образом: существует ли любое значение для x, где y покажет результат, который является усеченным, а не округленным представлением x?)

Если так: есть ли лучший способпревратить двойное число в округленное целое, не рискуя усечь?


Что-то понял: Math.round (x) возвращает длинное, а не двойное число.Следовательно: Math.round () не может вернуть число, похожее на 3.9999998.Поэтому int (Math.round ()) никогда не нужно будет ничего обрезать, и он всегда будет работать.

Ответы [ 3 ]

89 голосов
/ 24 июня 2011

существует ли вероятность, что приведение двойного числа, созданного с помощью Math.round(), все равно приведет к усеченному даун-номеру

Нет, round() всегда будет округлять ваш двойник до правильного значения, а затем он будет приведен к long, который усекает любые десятичные разряды. Но после округления не останется никаких дробных частей.

Вот документы из Math.round(double):

Возвращает ближайший длинный аргумент. Результат округляется до целого числа путем добавления 1/2, взятия минимального значения результата и приведения результата к типу long. Другими словами, результат равен значению выражения:

(long)Math.floor(a + 0.5d)
22 голосов
/ 06 сентября 2016

Для типа данных Double - int вы можете использовать следующее:

Double double = 5.00;

int integer = double.intValue();
8 голосов
/ 25 июля 2017
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

Решил мою цель.

...