Search code examples
javaroundingbigdecimal

How to get the exact value after multiplying and dividing a BigDecimal in java


import java.math.*;

public class Test{
public static void main(String args[]){

BigDecimal initialValue = BigDecimal.valueOf(193);
BigDecimal divider = BigDecimal.valueOf(3);
BigDecimal result = initialValue.divide(divider, 2, RoundingMode.HALF_UP);
System.out.println(initialValue + " / " + divider+" = "+result);
BigDecimal retriveInitialValue = result.multiply(divider);
System.out.println(result + " * " + divider+" = "+retriveInitialValue);

}
}

Output i am getting
193 / 3 = 64.33

64.33 * 3 = 192.99

What i Expect 193 / 3 = 64.33

64.33 * 3 = 193


Solution

  • org.jscience.mathematics.number.FloatingPoint initialValue =  org.jscience.mathematics.number.FloatingPoint.valueOf("145.123456789");
    org.jscience.mathematics.number.FloatingPoint divideWith =   org.jscience.mathematics.number.FloatingPoint.valueOf("3");
    org.jscience.mathematics.number.FloatingPoint result = initialValue.divide(divideWith); 
    System.out.println(result.doubleValue() );
    org.jscience.mathematics.number.FloatingPoint finalResult = result.times(divideWith);
    System.out.println(finalResult.doubleValue() );