Как преобразовать double в int в Java, округлив его? - PullRequest
69 голосов
/ 27 января 2010

Мне нужно привести значение типа double к int в Java, но числовое значение всегда должно округляться. т.е. 99,99999999 -> 99

Ответы [ 9 ]

132 голосов
/ 27 января 2010

Приведение к int неявно отбрасывает любое десятичное число. Нет необходимости вызывать Math.floor () (при условии положительных чисел)

Просто введите с (int), например ::1003*

System.out.println((int)(99.9999)); // Prints 99

Сказано, что поведение отличается от Math.floor, которое округляется в сторону отрицательной бесконечности (@Chris Wong)

30 голосов
/ 02 июля 2012

Для приведения двойного к целому числу и его округления до ближайшего целого числа (то есть в отличие от типичных (int)(1.8) и (int)(1.2), которые оба "округляют вниз" в направлении 0 и возвращают 1), просто добавьте 0,5 к double, который вы будете типизировать к int.

Например, если у нас есть

double a = 1.2;
double b = 1.8;

Тогда последующие выражения типов для x и y будут возвращать округленные значения (x = 1 и y = 1):

int x = (int)(a);   // This equals (int)(1.2) --> 1
int y = (int)(b);   // This equals (int)(1.8) --> 1

Но, добавив 0,5 к каждому, мы получим округленный до ближайшего целого результат , который мы можем желать в некоторых случаях (x = 1 и y = 2):

int x = (int)(a + 0.5);   // This equals (int)(1.8) --> 1
int y = (int)(b + 0.5);   // This equals (int)(2.3) --> 2

В качестве небольшой заметки этот метод также позволяет вам контролировать порог , при котором double округляется в большую или меньшую сторону при типизации (int).

(int)(a + 0.8);

к типу. Это округляется только до (int)a + 1 всякий раз, когда десятичные значения больше или равны 0,2. То есть, добавив 0,8 к double непосредственно перед типизацией, 10,15 и 10,03 будут округлены до 10 при (int) типизации, но 10,23 и 10,7 будут округлены до 11.

17 голосов
/ 27 января 2010

(интермедиат) 99,99999

Будет 99. Приведение двойного к целому не округляет, оно отбрасывает часть дроби.

11 голосов
/ 27 января 2010
Math.floor(n)

где n - двойное число. Похоже, что на самом деле это вернет double, так что убедитесь, что вы напечатали его после.

5 голосов
/ 01 апреля 2014

new Double(99.9999).intValue()

5 голосов
/ 27 января 2010

Это прекрасно работает int i = (int) dbl;

1 голос
/ 18 ноября 2015

попробуйте с этим, это просто

double x= 20.22889909008;
int a = (int) x;

this will return a=20

или попробуйте с этим: -

Double x = 20.22889909008;
Integer a = x.intValue();

this will return a=20

или попробуйте с этим: -

double x= 20.22889909008;
System.out.println("===="+(int)x);

this will return ===20

может быть, этот код поможет вам.

0 голосов
/ 16 октября 2018

В этом вопросе:

1. Преобразование двойного в целое - очень простая задача.

2.Но это не округляет двойное значение до ближайшего десятичного числа. Поэтому кастинг можно сделать так:

double d=99.99999999;
int i=(int)d;
System.out.println(i);

и будет напечатано 99, но округление еще не выполнено.

Таким образом, для округления мы можем использовать,

double d=99.99999999;
System.out.println( Math.round(d));

Это напечатает вывод 100.

0 голосов
/ 27 января 2010

Попробуйте использовать Math.floor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...