Java Compute Problem

I'm having a bit of trouble doing the calculation in Java. Here is what I am trying to do -

((0.053800 * (500000/1000)) + 4) * 0.85

In my java application, it returns 26.264999999999997, which, if rounded to two decimal places, becomes 26.26.

But in MS Excel, the same formula returns 26.265000 .. and therefore the rounded result is 26.27.

If my Java application returns the wrong value, what can I do to fix it?

+7
source share
2 answers

The following is a much better approximation, which leads to the same value in this case:

 import java.math.BigDecimal; import java.math.MathContext; public class Test { public static void main(String[] args) { //double d = ((0.053800 * (500000/1000)) + 4) * 0.85; BigDecimal d = ((new BigDecimal(0.053800).multiply(new BigDecimal(500000).divide(new BigDecimal(1000)))).add(new BigDecimal(4))).multiply(new BigDecimal(0.85)); System.out.println(d.round(MathContext.DECIMAL32)); } } 
+4
source

See my answer here for an explanation of what is happening.

+6
source

All Articles