Проблема с точностью Java BigDecimal: автоматическое округление результата во время расчетаJAVA

Программисты JAVA общаются здесь
Anonymous
Проблема с точностью Java BigDecimal: автоматическое округление результата во время расчета

Сообщение Anonymous »

Я работаю над программой на Java для расчета финансового результата с использованием BigDecimal для обеспечения точности. Несмотря на установку высокой точности и использование RoundingMode.HALF_EVEN в моих вычислениях, результат по-прежнему автоматически округляется при умножении двух значений BigDecimal.
Вот мой код:

Код: Выделить всё

import java.math.BigDecimal;
import java.math.RoundingMode;

private static BigDecimal next(BigDecimal value, BigDecimal rate) {
System.out.println(value + "---" + rate);

BigDecimal hundred = new BigDecimal("100");

// Divide rate by 100 with high precision
BigDecimal rateDivided = rate.divide(hundred, 20, RoundingMode.HALF_EVEN);

// Add 1 to the divided rate
BigDecimal increment = BigDecimal.ONE.add(rateDivided);

// Multiply the original value by the increment
BigDecimal result = value.multiply(increment);

// Round the final result to 4 decimal places
result = result.setScale(4, RoundingMode.HALF_EVEN);

System.out.println("Final result: " + result);
return result;
}

public static void main(String[] args) {
BigDecimal value = new BigDecimal("9584.0000");
BigDecimal rate = new BigDecimal("8.0000");

BigDecimal result = next(value, rate);
System.out.println("Result: " + result);
}
Вход:
значение = 9584,0000
ставка = 8,0000
Ожидаемый результат:
10350,7197
Фактический результат:
10350,7200
Я пробовал использовать более высокую точность для промежуточных шагов и RoundingMode.HALF_EVEN, но окончательный результат все равно округляется до 10350,7200. . Мне нужна точность, которая бы соответствовала ровно четырем десятичным знакам без преждевременного округления последних цифр.
Использование MathContext для более высокой точности.
Увеличение масштаба при делении и умножении.
/>Округление только на последнем этапе.
Несмотря на эти усилия, результат все равно округляется. Может ли кто-нибудь помочь мне определить, чего мне не хватает, или предложить другой подход?

Подробнее здесь: https://stackoverflow.com/questions/790 ... alculation

Вернуться в «JAVA»