Каков правильный тип данных для вычислений в Java - PullRequest
6 голосов
/ 02 июня 2010

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

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

Ответы [ 6 ]

5 голосов
/ 02 июня 2010

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

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

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

3 голосов
/ 02 июня 2010

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

Зависит от того, сколько цифр вам нужно, с длинной и десятичной дробью для визуализации.

3 голосов
/ 02 июня 2010

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

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

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

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

       1/3 + 1/3 + 1/3  ->  ?
1 голос
/ 02 июня 2010

Как всегда: это зависит.

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

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

0 голосов
/ 10 февраля 2014

байт = 8 bit

короткий = 2 byte = 16 bit

int = 4 byte = 32 bit

long = 8 byte = 64 bit

float = 4 byte = 32 bit

double = 8 byte = 64 bit

простой расчет:

2 байта = 1 short

2 int = 1 long

2 коротких = 1 int

float = int

2 float = double

0 голосов
/ 02 июня 2010

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

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

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