Подтвердить что ты не робот

Какой режим округления используется для манипулирования валютой в java?

Я прочитал на сайте java для использования BigDecimal для валют. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Но какой режим округления мы должны использовать? который является наиболее подходящим и наиболее широко нас

4b9b3361

Ответ 1

Нет "правильного" режима, это зависит от бизнес-кейса. Примеры:

  • При расчете годовых налогов фракции часто обрезаются (RoundingMode.FLOOR).
  • При расчете бонуса вы можете всегда крутиться в пользу клиента (RoundingMode.CEILING).
  • Для налогов на счет, вы обычно округлите HALF_UP
  • При выполнении сложных финансовых симуляций вы не хотите вообще крутить.

Документация RoundingMode содержит множество примеров работы различных режимов.

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

Тем не менее, BigDecimal является правильным типом для использования в Java, потому что он может сохранить любую точность, плюс он позволяет вам выбрать режим округления, наиболее подходящий для вашего случая.

Ответ 2

В большинстве случаев BigDecimal является единственным допустимым выбором для валют. Но выбор стратегии округления не так очевиден.

По умолчанию используется HALF_EVEN, что является хорошим выбором. Этот алгоритм известен как округление банкиров (см. Обсуждение здесь).

Другая распространенная стратегия HALF_UP, которая более интуитивно понятна, но имеет несколько худшие статистические характеристики.

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

Ответ 3

Как правило, вы должны использовать закругление "half up", например:

myBigDecimal.setScale(2, RoundingMode.HALF_UP);

Таким образом, вы округлите до двух знаков после запятой (которые используются большинством валют, например, доллары и центы, очевидно, есть исключения), и вы будете округлять значения таким образом, чтобы полцены или более округлялись, половина процента округляется. Подробнее см. javadoc.

Ответ 4

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

Ответ 5

Вы не должны использовать десятичный тип для валют. Используйте целочисленный тип. Это сохраняет точность покупки, избегая ошибки округления, связанной с поплавками.

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