srikanth m
srikanth m

Reputation: 11

why Java BigDecimal giving Precision Errors

i am using java big decimal. but still i am not getting expected result..

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 class:

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);
    }

}

output:

reminder= 1.333333333333333333333333333333333
v1 Result= 99.99999999999999999999999999999998

here v1 Result should be 100 right.

but why it is giving wrong one. how to handle these problems. i cannot use more than 34 digits precision. and i do not want rounding. please suggest a solution.. consider i have huge application, no of arthimatic calculations going on. please suggest a feasible solution.

Upvotes: 0

Views: 66

Answers (0)

Related Questions