Масштаб и расчеты BigDecimal

Я использую BigDecimal для вычислений. Для результата расчета делаю:

result.setScale(4, RoundingMode.HALF_UP);

При использовании .divide метода BigDecimal требуется масштабирование и округление, поэтому сейчас я делаю это так:

BigDecimal result = bigDecimal1.divide(bigDecimal2, 10, RoundingMode.HALF_UP);

Поэтому я просто использую достаточно большой масштаб, чтобы быть уверенным, что расчеты будут правильными. Но я не уверен, что это правильный способ выполнения вычислений с помощью BigDecimal, и у меня есть сомнения по этому поводу...

Поэтому любые указатели приветствуются.


person Nathan Q    schedule 16.12.2011    source источник
comment
@jarnbjo Правильно ли я делаю? А если нет, то как мне быть? ...   -  person Nathan Q    schedule 16.12.2011
comment
И вы предоставили нам, какие функциональные требования позволяют нам решить, правильно вы это делаете или нет?   -  person jarnbjo    schedule 16.12.2011


Ответы (2)


Вы должны иметь четкое представление о том, что вы считаете правильным ответом. Если ошибка меньше 1e-10, это нормально или она должна быть 1e-20 или 1e-30 и т. д. Для многих результатов деления вы не можете получить точный результат, потому что результат представлен в виде десятичной дроби.

Кстати: если вам нужно менее 15 значащих цифр, это точность использования double, и вам может не понадобиться использовать BigDecimal.

например 1/3 считается равным 0,333333333 или 0,3333333333333333333, но никогда не будет точно правильным (т.е. бесконечным по длине)

person Peter Lawrey    schedule 16.12.2011

Ты делаешь это правильно.

Вы можете найти на JavaPractices некоторые примеры с BigDecimal.

person LaGrandMere    schedule 16.12.2011