Проблема: при использовании BigDecimal для нескольких вычислений с делением. трудно понять по десятичной дроби.
Например:
1/3*3
мы ожидаем 1
но когда вы используете BigDecimal.
мы получаем ArithmeticException
если я добавлю roundingMode для метода разделения.
получаем 0.9999999999999
float result1 = 1f / 3f * 3f;
BigDecimal one = BigDecimal.valueOf(1);
BigDecimal three = BigDecimal.valueOf(3);
BigDecimal result2 = one.divide(three,64,BigDecimal.ROUND_HALF_UP).multiply(three);
System.out.println(result1);
System.out.println(result2);
Выход
1.0
0.9999999999999999999999999999999999999999999999999999999999999999
Я знаю, что эта проблема как-то связана с режимом округления, но я не знаю, как решить эту проблему.
Большое спасибо, если вы можете помочь предложить решение.
PS: Мой английский не очень хорош, я должен видеть, извините :)
long
для представления центов для управления вашими денежными значениями. Это будет означать, что минимально возможное значение фиксировано и равно целому числу центов. Таким образом, стоимость 13250 центов (длинная) будет равна 132,50 долларам. Таким образом, вы избежите обсуждения BigDecimal и операций с плавающей запятой. Вам нужно будет помнить своему интерфейсу, что вы используете центы для представления единиц вашей национальной валюты, чтобы соответствующим образом исправить ваш интерфейс. - person Victor Polo De Gyves Montero   schedule 06.03.2021