Вставить Double в Integer в Java

Любой способ бросить java.lang.Double в java.lang.Integer ?

Он выдает исключение

“java.lang.ClassCastException: java.lang.Double несовместим с java.lang.Integer”

17 Solutions collect form web for “Вставить Double в Integer в Java”

« Double не является целым, поэтому приведение не будет работать. Обратите внимание на разницу между Double classом и double примитивом . Также обратите внимание, что Double является Number , поэтому он имеет метод intValue , когда вы можете использовать для получения примитивного int .

Вам нужно явно получить значение int с помощью метода intValue () следующим образом:

 Double d = 5.25; Integer i = d.intValue(); // i becomes 5 

Или

 double d = 5.25; int i = (int) d; 

Я вижу три возможности. Первые два отсекают цифры, последний округляется до ближайшего целого.

 double d = 9.5; int i = (int)d; //i = 9 Double D = 9.5; int i = Integer.valueOf(D.intValue()); //i = 9 double d = 9.5; Long L = Math.round(d); int i = Integer.valueOf(L.intValue()); //i = 10 

Я думаю, что невозможно понять другие ответы, не покрывая подводных камней и рассуждений позади него.

Вы не можете напрямую передать Integer в объект Double . Также Double и Integer являются неизменяемыми объектами, поэтому вы никак не можете их модифицировать. Однако у каждого числового classа есть примитивная альтернатива ( Double vs double , Integer vs int , …).

Обратите внимание, что эти примитивы начинаются с строчного символа (например, int ), что на самом деле говорит нам, что они не являются classами / объектами. Это также означает, что у них нет методов.

Страtagsя:

Чтобы преобразовать Double в Integer вам необходимо следовать этой страtagsи:

  1. Преобразуйте Double объект в примитивный double . (= “unboxing”)
  2. Преобразуйте примитивный double в примитивный int . (= “литье”)
  3. Преобразуйте примитивный int обратно в объект Integer . (= “бокс”)

В коде:

 // starting point Double myDouble = Double.valueOf(10.0); // step 1: unboxing double dbl = myDouble.doubleValue(); // step 2: casting int intgr = (int) dbl; // step 3: boxing Integer val = Integer.valueOf(intgr); 

На самом деле есть ярлык. Вы можете немедленно удалить из Double прямо в примитив int . Таким образом, вы можете полностью пропустить шаг 2.

 Double myDouble = Double.valueOf(10.0); Integer val = Integer.valueOf(myDouble.intValue()); // the simple way 

Ловушки:

Тем не менее, есть много вещей, которые не рассматриваются в приведенном выше коде. Приведенный выше код не является нулевым.

 Double myDouble = null; Integer val = Integer.valueOf(myDouble.intValue()); // will throw a NullPointerException // a null-safe solution: Integer val = (myDouble == null)? null : Integer.valueOf(myDouble.intValue()); 

Теперь он отлично подходит для большинства значений. Однако целые числа имеют очень малый диапазон (минимальное / максимальное значение) по сравнению с Double . Кроме того, двойники могут также содержать «специальные значения», что целые числа не могут:

  • 1/0 = + бесконечность
  • -1/0 = -infinity
  • 0/0 = неопределенный (NaN)

Поэтому, в зависимости от приложения, вы можете добавить некоторую фильтрацию, чтобы избежать неприятных исключений.

Тогда следующий недостаток – страtagsя округления. По умолчанию Java всегда будет округлять. Округление имеет смысл во всех языках программирования. В основном Java просто отбрасывает некоторые из байтов. В финансовых приложениях вы, безусловно, захотите использовать округление округления (например: round(0.5) = 1 и round(0.4) = 0 ).

 // null-safe and with better rounding long rounded = (myDouble == null)? 0L: Math.round(myDouble.doubleValue()); Integer val = Integer.valueOf(rounded); 

Автомототехника (ип) бокс

У вас может возникнуть соблазн использовать авто-(un) бокс в этом, но я бы этого не сделал. Если вы уже застряли сейчас, то следующие примеры не будут так очевидны. Если вы не понимаете внутреннюю работу авто-(un) бокса, пожалуйста, не используйте ее.

 Integer val1 = 10; // works Integer val2 = 10.0; // doesn't work Double val3 = 10; // doesn't work Double val4 = 10.0; // works Double val5 = null; double val6 = val5; // doesn't work (throws a NullPointerException) 

Думаю, следующее не должно быть неожиданностью. Но если это так, то вы можете прочитать статью о кастинге на Java.

 double val7 = (double) 10; // works Double val8 = (Double) Integer.valueOf(10); // doesn't work Integer val9 = (Integer) 9; // pure nonsense 

Предпочитает значение Of:

Кроме того, не следует пытаться использовать new Integer() (как предлагают некоторые другие ответы). Методы valueOf() лучше, потому что они используют кеширование. Это хорошая привычка использовать эти методы, потому что время от времени они сэкономит вам некоторую память.

 long rounded = (myDouble == null)? 0L: Math.round(myDouble.doubleValue()); Integer val = new Integer(rounded); // waste of memory 

Действительно, самый простой способ – использовать intValue() . Однако это просто возвращает целочисленную часть; он не делает никакого округления. Если вы хотите, чтобы Integer был ближе к двойному значению, вам нужно сделать следующее:

 Integer integer = Integer.valueOf((int) Math.round(myDouble))); 

И не забудьте нулевой случай:

 Integer integer = myDouble == null ? null : Integer.valueOf((int) Math.round(myDouble))); 

Math.round() обрабатывает нечетные случаи утки, такие как бесконечность и NaN, с относительной грацией.

Как это:

 Double foo = 123.456; Integer bar = foo.intValue(); 
 double a = 13.34; int b = (int) a; System.out.println(b); //prints 13 
 Double d = 100.00; Integer i = d.intValue(); 

Следует также добавить, что он работает с autoboxing.

В противном случае вы получите int (примитив), а затем можете получить Integer:

 Integer i = new Integer(d.intValue()); 

Просто сделайте это так …

 Double d = 13.5578; int i = d.intValue(); System.out.println(i); 

Вызовите intValue() на свой Double объект.

Вы можете сделать это, используя «Сужение или Явное преобразование типа», double → long → int. Надеюсь, это сработает.

 double d = 100.04; long l = (long)d; // Explicit type casting required int i = (int)l; // Explicit type casting required 

PS: Он будет давать 0, поскольку double имеет все десятичные значения и ничего с левой стороны. В случае 0.58 он будет сужать его до 0. Но для других он будет делать магию.

Попробуй это

 double doubleValue = 6.5;Double doubleObj = new Double(doubleValue);int intResult = doubleObj.intValue(); 

Double и Integer – это classы-оболочки для Java-примитивов для double и int соответственно. Вы можете бросить между ними, но вы потеряете плавучую точку. То есть, 5.4, отбрасываемый в int, будет 5. Если вы вернете его, оно будет 5.0.

Просто используйте метод intValue Double

 Double initialValue = 7.12; int finalValue = initialValue.intValue(); 

Используйте doubleNumber.intValue(); метод.

Эффективная память, так как она будет совместно использовать уже созданный экземпляр Double.

 Double.valueOf(Math.floor(54644546464/60*60*24*365)).intValue() 

Это сработало для меня. Попробуй это:

 double od = Double.parseDouble("1.15"); int oi = (int) od; 
  • Тест JUnit для System.out.println ()
  • Что такое хорошая библиотека Java для распаковки / распаковки файлов?
  • Как мне адресовать непроверенные предупреждения о броске?
  • Предшествующее поведение оператора приращения в C, C ++, Java и C #
  • Java: Что делает оператор двоеточия (:)?
  • drag and drop jlabel вокруг экрана
  • Получить выделенные строки в JTable с помощью AbstractTableModel
  • Правильный способ закрыть вложенные streamи и записи в Java
  • Случай с проверенными исключениями
  • Как использовать Comparator в Java для сортировки
  • Что такое интерфейс в Java?
  • Interesting Posts

    Как монтировать и отключать жесткие диски под Windows (путь unix)

    Как восстановить поврежденные файлы, найденные sfc / scannow? «Windows Resource Protection обнаружила поврежденные файлы, но не смогла исправить некоторые из них».

    Добавить идентификатор столбца по группе

    Почему нам нужно установить пространство подкачки вдвое большим, чем наша физическая память?

    Возможно ли иметь несколько повторителей в сети с одним единственным SSID?

    Можно ли изменить расположение пакетов для NuGet?

    Беспроводной передатчик WLAN для настольного компьютера?

    Как создать динамически растущий граф, который игнорирует пустые хвостовые ячейки?

    От 32 до 64 бит с большей оперативной памятью или SSD?

    Как найти сборку / версию Windows 10

    Существуют ли быстрые клавиши Windows 7 для выхода из системы и ожидания?

    Передача данных со страницы на страницу

    Проблема с Windows XP Internet

    В чем разница между Скрытой учетной записью администратора и обычной учетной записью администратора в Windows 10?

    Решение двусмысленной ссылки

    Давайте будем гением компьютера.