Вот мой код:
Код: Выделить всё
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