Почему Java BigDecimal выдает ошибки точностиJAVA

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

Сообщение Anonymous »

Я использую большую десятичную дробь в Java. но я все равно не получаю ожидаемого результата..

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

public class DecimalAdjustEx {

public static void main(String[] args) {
BigDecimal v1 = new BigDecimal("100");
BigDecimal v2 = new BigDecimal("75");
BigDecimal reminder = BigDecimalUtils.divide(v1,v2);
System.out.println("reminder= "+reminder);
BigDecimal v1Result = BigDecimalUtils.multiply(reminder,v2);
System.out.println("v1 Result= "+v1Result);
}
}
Класс Utils:

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

public class BigDecimalUtils {

public static final MathContext DEFAULT_MATH_CONTEXT = new MathContext(34, RoundingMode.HALF_UP);

public static BigDecimal multiply(BigDecimal value1, BigDecimal value2) {
return value1.multiply(value2,DEFAULT_MATH_CONTEXT);
}

public static BigDecimal divide(BigDecimal value1, BigDecimal value2) {
return value1.divide(value2,DEFAULT_MATH_CONTEXT);
}

public static BigDecimal add(BigDecimal value1, BigDecimal value2) {
return  value1.add(value2,DEFAULT_MATH_CONTEXT);
}

public static BigDecimal subtract(BigDecimal value1, BigDecimal value2) {
return value1.subtract(value2,DEFAULT_MATH_CONTEXT);
}

}
вывод:

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

reminder= 1.333333333333333333333333333333333
v1 Result= 99.99999999999999999999999999999998
здесь v1 Результат должен быть 100 верным.
но почему он выдает неправильный результат. как справиться с этими проблемами.
Я не могу использовать точность более 34 цифр. и я не хочу округления. пожалуйста, предложите решение..
учтите, что у меня огромное приложение, никаких художественных вычислений не происходит. пожалуйста, предложите возможное решение.

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