2014-02-28 2 views
1

Предполагая, что производительность не является проблемой, и зная, что я хочу использовать только ОДИН тип для всех чисел, которые у меня есть в моей программе, какой тип будет правильным один для использования? Я думаю, что BigDecimal, вероятно, лучший вариант, но я не уверен в этом.Что такое самый точный тип Java для описания числа

+3

Я боюсь, что это вопрос, прежде всего, мнение, основанное, и, вероятно, слишком широка, чтобы ответить. BigDecimal достаточно прочен, чтобы обрабатывать почти все, что вы можете на него наброситься, но мы понятия не имеем, что ваше приложение делает или что нужно делать. –

+0

Вы сами ответили - BigDecimal –

+0

Может быть, вы должны быть достаточно обобщенными, чтобы работать с любым числом вместо того, чтобы работать с типом номера, который не существует. BigDecimal не может даже представлять 1/3 правильно, не говоря уже о pi, sqrt (-1), кватернионе или большинстве сюрреалистических чисел. –

ответ

1

Вы правы. Если вы хотите использовать только один (не включая BigInteger), вы должны использовать BigDecimal.

Вот объяснение: The need of BigDecimal

И вы также можете проверить этот ответ: Double vs. BigDecimal?

7

Это зависит от того, как вы хотите использовать цифры.

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

Если цифры могут быть слишком большими для intlong. Использует в два раза больше памяти, но все-таки эффективен.

Если слишком большой для longBigInteger. Использует оптимальное количество байтов для числа. Перерывы, когда число> около 2^65535, работает для большинства сценариев. Медленно, чем int или long, но все же серьезно быстро.

Если слишком большой для BigInteger, то вы по своему усмотрению. Возможно, однажды ...

Если вам нужна плавающая математика float или double хороши, пока вы работаете в своем диапазоне.

Для больших плавающих математических вычислений или более прогнозируемого расчета, чем double или float, используйте BigDecimal. Ха сидит ограничения, такие как BigInteger, но их редко укусить.

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

Если вы, вероятно, перейдете на иррациональную территорию, вы можете найти некоторые из классов продолжения фракций. Here - пример.

Смежные вопросы