Преобразование double в integer в java

В 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?)

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


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

Ответ 1

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

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

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

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

(long)Math.floor(a + 0.5d)

Ответ 2

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

Double double = 5.00;

int integer = double.intValue();

Ответ 3

Двойной perValue = 96,57; int roundVal = (int) Math.round(perValue);

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

Ответ 4

double a = 1.450;

String sa = String.valueOf(a);
int lengthUntilPoint = sa.indexOf(".")+1;
int power = sa.length() - lengthUntilPoint;
int ia = (int) (a* Math.pow(10, power));