Patrick - 1 year ago 59

Java Question

Seems like the subtraction is triggering some kind of issue and the resulting value is wrong.

`double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;`

78.75 = 787.5 * 10.0/100d

`double netToCompany = targetPremium.doubleValue() - tempCommission;`

708.75 = 787.5 - 78.75

`double dCommission = request.getPremium().doubleValue() - netToCompany;`

877.8499999999999 = 1586.6 - 708.75

The resulting expected value would be 877.85.

What should be done to ensure the correct calculation?

Answer Source

To control the precision of floating point arithmetic, you should use java.math.BigDecimal. Read The need for BigDecimal by John Zukowski for more information.

Given your example, the last line would be as following using BigDecimal.

```
import java.math.BigDecimal;
BigDecimal premium = BigDecimal.valueOf(1586.6d);
BigDecimal netToCompany = BigDecimal.valueOf(708.75d);
BigDecimal commission = premium.subtract(netToCompany);
System.out.println(commission + " = " + premium + " - " + netToCompany);
```

This results in the following output.

```
877.85 = 1586.6 - 708.75
```