В Java я хочу преобразовать двойное число в целое число, я знаю, если вы это сделаете:
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?)
Если да: есть ли лучший способ превратить double в округленное целое число без риска усечения?
Прикинул что-то: Math.round (x) возвращает длинный, а не двойной. Следовательно: Math.round () не может вернуть число вида 3.9999998. Следовательно, int (Math.round ()) никогда не потребуется что-либо усекать, и он всегда будет работать.
Ответы:
Нет,
round()
ваш double всегда будет округляться до правильного значения, а затем он будет преобразован в,long
который будет усекать любые десятичные знаки. Но после округления дробных частей не останется.Вот документы от
Math.round(double)
:источник
[max double: 1.7976931348623157E308]
в int, которое намного меньше[max int: 2147483647]
. Просто нужно иметь в виду.Для типа данных
Double
кint
, вы можете использовать следующее:источник
Решил мою цель.
источник