Есть ли числовой тип (примитив или класс) в Java, который содержит все остальные числовые типы? - PullRequest
0 голосов
/ 27 мая 2020
  • Можно ли преобразовать любое число в Double в Java?

  • Если нет, существует ли класс Number, который мог бы анализировать любой числовой тип и что обеспечит базовые c математические операции?

У меня есть числа, которые могут быть int, double, float, long, unsigned float или unsigned long. Если бы я мог просто называть их «Число», это было бы проще, так как все, что мне нужно от них, это работать как равно, больше, чем, ...

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Существует ли числовой тип (примитив или класс) в Java, который содержит все остальные числовые типы?

Нет.

Начиная с примитивных типов:

  • a byte не содержит всех short значений
  • a short или char не содержит всех int значений.
  • an int не содержит всех значений long.
  • a long не содержит всех float значений.
  • a float не содержит все значения double.

Вышеизложенное очевидно из диапазонов соответствующих типов.

  • a double не содержит всех значений long.

Это не так уж и очевидно. Диапазон double больше, чем диапазон long, но double имеет только 53 бита точности. Если вы выполните математические вычисления, это означает, что есть числа (целые числа) в диапазоне long, которые не могут иметь точное представление в виде double значений. Long.MAX_VALUE будет одним примером.

А как насчет BigInteger и BigDecimal.

  • BigInteger не включает значения в double, которые не целые числа.

  • BigDecimal не включает значения, которые соответствуют значениям ± INF или ± NaN в double


Можно ли преобразовать любое число в Double в Java?

Нет, как описано выше. Некоторым значениям long не соответствует значение double. Здесь есть BigInteger и BigDecimal значения.

Если нет, существует ли класс Number, который мог бы анализировать любой числовой тип и который обеспечивал бы базовые c математические операции?

Если вы готовы сбрасывать со счетов значения INF и NaN и использовать достаточно большое precision в MathContext, тогда BigDecimal должно быть достаточно ... в пределах машинной памяти и реализация.

(Текущий класс BigInteger имеет архитектурный предел; см. Есть ли верхняя граница для BigInteger? )

1 голос
/ 27 мая 2020

java .lang.Number - это абстрактный суперкласс для множества различных типов чисел. Таким образом, Java является языком со строгой типизацией и всегда ожидает правильных типов данных. Это правда, что иногда необходимо преобразовать его в правильный или другой тип данных.

Дьявол кроется в деталях. Конечно, java .lang.Number - это класс, который содержит все остальные числовые типы.

Кажется, это помогает

Number number = NumberFormat.getInstance().parse(myString);

Предоставлено Joakim { ссылка }

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