How can I get the correct answer when I need to use BigDecimal without losing precision.
BigDecimal a = new BigDecimal(0.5); BigDecimal b = new BigDecimal(30); BigDecimal c = new BigDecimal(18000); a.divide(b).multiply(c);
How could I get the exact 300 in this case?
You can use the MathContext parameter in the
divide method for this.
a.divide(b, MathContext.DECIMAL128).multiply(c); will give you the precision you need (with an error of magnitude
1e-32). If you do not want to lose any precision, you can use
MathContext.UNLIMITED, but this will result in a non-terminating decimal expansion.
In your case specifically, you can also try to rewrite the equation to prevent any rounding from happening:
a / b * c = c / b * a.