Consider the following Simple Code:

class SubTest{

public static void main(String[] args){

double a = 10.00;

double b = 10.60;

double c = 10.50;

System.out.println(“b – a :” + (b-a));

System.out.println(“c – a :” + (c-a));

}

}

What could be the output??

b – a :0.5999999999999996

c – a :0.5

Well, we know in simple maths 10.60 – 10.00 = .60;

But, why is the computation adding a small signed error to the result!!!. The computer floating point unit works internally in base 2, binary ie., the Representation of repeater fraction 1/3 = 0.33333 in base 10. Such fractions cannot be precisely represented in base10. The same fundamental mathematical cause is at work.

To avoid such errors, we can look at using BigDecimal:

import java.math.*;

public class SubTest1{

public static void main(String args[]){

BigDecimal num1 = new BigDecimal(“10.60”);

BigDecimal num2 = new BigDecimal(“10.00”);

BigDecimal result = num1.subtract(num2).setScale(2, BigDecimal.ROUND_HALF_UP);

System.out.println(“num1 – num2 :” + result);

}

}

And, the result:

num1 – num2 :0.60

### Like this:

Like Loading...

*Related*