В 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 в округленное int без риска усечения?
Вот что я понял: Math.round(x) возвращает long, а не double. Следовательно: невозможно, чтобы Math.round() вернул число, похожее на 3.9999998. Поэтому int(Math.round()) никогда не нужно усекать и всегда будет работать.
есть ли вероятность того, что приведение двойки, созданной с помощью
Math.round()
, все равно приведет к усеченному числу.
Нет, round()
всегда округлит ваше двойное число до правильного значения, а затем оно будет приведено к long
, что приведет к усечению всех десятичных знаков. Но после округления не останется никаких дробных частей.
Вот документация из Math.round(double)
:
Возвращает ближайший к аргументу long. Результат округляется до целого числа путем сложения 1/2, взятия полученного результата и приведения результата к типу long. Другими словами, результат равен значению выражения:
(long)Math.floor(a + 0.5d)
Для преобразования типа данных Double
в int
можно использовать следующее:
Double double = 5.00;
int integer = double.intValue();
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
Решил мою задачу.