Каков правильный тип данных для вычислений в Java

Мы должны использовать дважды или BigDecimal для вычислений в Java?

Сколько издержки с точки зрения производительности для BigDecimal, как сравнено для удвоения?

7
задан Raju 2 June 2010 в 10:10
поделиться

5 ответов

Для серьезного финансового приложения BigDecimal просто необходим.

В зависимости от того, сколько цифр вам нужно, вы можете использовать длинные и десятичные коэффициенты для визуализации.

4
ответ дан 6 December 2019 в 19:33
поделиться

Даже в сфере финансов мы не можем ответить, не зная, в какой сфере. Например, если вы конвертируете миллиарды долларов в валюту, где курс конвертации может составлять 5 d.p. у вас могут быть проблемы с двойным. Тогда как для простого сложения и вычитания остатков все будет в порядке.

Если вам не нужно работать в долях цента / пенни, возможно, более подходящим будет целочисленный тип, опять же, это зависит от размера задействованных чисел.

0
ответ дан 6 December 2019 в 19:33
поделиться

Для общих вычислений с плавающей запятой следует использовать double. Если вы абсолютно уверены, что вам действительно нужна арифметика произвольной точности (в большинстве приложений это не так), то вы можете рассмотреть BigDecimal.

Вы обнаружите, что double значительно превосходит BigDecimal (не говоря уже о том, что с ним проще работать) для любого приложения, где double является достаточной точностью.

Update: Вы прокомментировали в другом ответе, что хотите использовать это для приложения, связанного с финансами. Это одна из областей, где вам действительно следует рассмотреть использование BigDecimal, иначе вы можете получить неожиданные эффекты округления от вычислений double. Кроме того, значения double имеют ограниченную точность, и вы не сможете точно отслеживать копейки одновременно с миллионами долларов.

5
ответ дан 6 December 2019 в 19:33
поделиться

Как всегда: зависит от обстоятельств.

Если вам нужна точность (даже для «маленьких» чисел, например, при представлении сумм), выберите BigDecimal .

В некоторых научных приложениях double может быть лучшим выбором.

1
ответ дан 6 December 2019 в 19:33
поделиться

Сколько накладных расходов с точки зрения производительности BigDecimal по сравнению с double?

Много. Например, умножение двух чисел двойной точности - это одна машинная инструкция. Умножение двух BigDecimals, вероятно, составляет минимум 50 машинных инструкций и имеет сложность O (N * M) , где M и N - количество используемых байтов. для представления двух чисел.

Однако, если ваше приложение требует, чтобы вычисление было «десятичным правильным», вам необходимо принять накладные расходы.

Однако (# 2) ... даже BigDecimal не может выполнить это вычисление с точностью действительного числа :

       1/3 + 1/3 + 1/3  ->  ?

Чтобы выполнить это вычисление точно, вам потребуется реализовать Рациональный тип; то есть пара значений BigInteger ... и кое-что для уменьшения общих факторов.

Однако (# 3) ... даже гипотетический рациональный тип не даст вам точного числового представления для (скажем) числа Пи.

3
ответ дан 6 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: