Відповіді:
Згідно з тим же Javadoc:
Якщо аргумент - NaN
це нескінченний чи позитивний нуль або від’ємний нуль, то результат такий же, як аргумент. Неможливо зробити це з int
.
Найбільше double
значення також більше, ніж найбільше int
, тому воно повинно бути а long
.
Це для точності. Подвійний тип даних має 53-бітну мантісу. Крім усього іншого, це означає, що подвійний може представляти всі цілі до 2 ^ 53 без втрати точності.
Якщо ви збережете таку велику кількість в цілому числі, ви отримаєте переповнення. Цілі числа мають лише 32 біти.
Повернення цілого числа як подвійного - це правильна справа, оскільки воно пропонує набагато ширший корисний діапазон чисел, ніж ціле число.
Інші сказали вам, чому я збираюся сказати вам, як правильно округлити, якщо ви хочете це зробити. Якщо ви збираєтесь використовувати лише додатні цифри, ви можете використовувати цей вислів:
int a=(int) 1.5;
Однак (int) завжди округляється до 0. Таким чином, якщо ви хочете зробити від'ємне число:
int a=(int) -1.5; //Equal to -1
У моєму випадку я цього не хотів робити. Я використовував наступний код для округлення, і, здається, добре обробляє всі крайові випадки:
private static long floor(double a)
{
return (int) Math.floor(a);
}
(int) Math.floor(a)
? Це, мабуть, більш ефективно і коротше.
(int) Math.floor(a)
вас може просто написати (int) a
, якщо a є позитивним.
Так само, як у Яві є ділення на ціле число і плаваючу крапку, існують способи виконання підлоги на цілі та плаваючі точки:
double f = Math.floor(x);
або
int k = (int) x;
але завжди потрібно бути обережним при використанні підлоги з обмеженою арифметикою точності: ваш розрахунок x може отримати щось на зразок 1.99999999, яке буде порівну до 1, а не 2 в обох формах. Існує багато алгоритмів, які потребують подолання цього обмеження, щоб уникнути отримання помилкових результатів для деяких вхідних значень.
Отже, помилка та інші не цілі значення можуть правильно каскадуватись через ряд обчислень.
Наприклад, якщо ви подаєте не номер (NaN) в Math.floor, він передасть це разом.
Якщо він повернув ціле число, він не міг би передати ці статуси або помилки, і ви можете отримати погані результати від попереднього обчислення, які виглядають добре, але помиляються після подальшої обробки.