Деньги играют важную роль в жизни, и инженеру-программисту приходится иметь дело с денежными расчетами, такими как денежная арифметика, во время разработки программного обеспечения. Если это электронная коммерция или банковское приложение, то большая часть расчетов идет только на деньги. Но иногда значение 0,01 также делает всю денежную арифметику неправильной. В этот раз мы нажимаем нашу кнопку разума и продолжаем отладку, расчеты вручную бла-бла-бла !!! Но в итоге мы иногда не могли найти решения; а на самом деле решения пляшут впереди, а мы не в состоянии их уловить.

Когда вы имеете дело с «денежным» значением, всегда возникает вопрос — следует ли использовать тип данных double или float для представления денежных значений?

Ответ: ни двойной, ни плавающий. О, босс!!!!! Почему и что мне следует использовать??

Почему бы не удвоить/плавать:

Давайте рассмотрим пример:

Этот код приведет к бесконечному циклу, поскольку результатом вычитания суммы1 и суммы 2 будет не 1,5, а «1.xxxxxxxxxxxxx», что делает логическое условие всегда истинным.

Решение :

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

Использование неправильного конструктора BigDecimal

Другая ошибка Java-программистов заключается в использовании неправильного конструктора BigDecmial. BigDecimal имеет перегруженный конструктор, и если вы используете тот, который принимает double в качестве аргумента, вы получите тот же результат, что и при работе с double. Поэтому всегда используйте BigDecimal с конструктором String. вот пример использования BigDecmial, построенного с двойными значениями:

Вывод :

  • Не используйте числа с плавающей запятой и двойное число для денежных расчетов.
  • Используйте BigDecimal, long или int для денежного расчета.
  • Используйте BigDecimal со строковым конструктором и избегайте двойного числа.
  • Использовать Money API (JSR-354)

Примечание :

Производительность операций BigDecimal ниже, чем производительность примитивных типов, таких как double, float .