infinidem
asked on
Multiplication accurary
Hi,
working on a simple problem and wanted to get some ideas of the best way around it. Essentially I want to solve the following problem:
$0.75 * 120%
The answer is $0.90.
I have tried the following:
With the following output:
0.900000000000000008326672 6846886740 5317723751 0681152343 75
0.8999999999999999
0.8999999999999999
0.8999999999999999
0.9
0.9
working on a simple problem and wanted to get some ideas of the best way around it. Essentially I want to solve the following problem:
$0.75 * 120%
The answer is $0.90.
I have tried the following:
BigDecimal bd1 = new BigDecimal(.75);
BigDecimal bd2 = new BigDecimal(.2);
BigDecimal bd3 = new BigDecimal(1);
System.out.println( bd1.multiply(bd2.add(bd3)));
System.out.println( 0.75 * ( 1 + 0.20) );
System.out.println( .75d * 1.2d );
System.out.println( .75d / 5d * 6d);
System.out.println( 75d * 1.2d /100d);
System.out.println( .75d * (( 1d + 0.2d) * 100d)/100d );
With the following output:
0.900000000000000008326672
0.8999999999999999
0.8999999999999999
0.8999999999999999
0.9
0.9
I think it should be like that for your code:
BigDecimal bd4 = bd1.multiply(bd2.add(bd3)) ;
bd4 = bd4.setScale(2,RoundingMod e.HALF_UP) ;
System.out.println("bd4: " + bd4);
Let me test.
BigDecimal bd4 = bd1.multiply(bd2.add(bd3))
bd4 = bd4.setScale(2,RoundingMod
System.out.println("bd4: " + bd4);
Let me test.
Yes, this worked for me:
BigDecimal bd1 = new BigDecimal(.75);
BigDecimal bd2 = new BigDecimal(.2);
BigDecimal bd3 = new BigDecimal(1);
BigDecimal bd4 = bd1.multiply(bd2.add(bd3));
bd4 = bd4.setScale(2,RoundingMode.HALF_UP);
System.out.println("bd4: " + bd4);
Output:
bd4: 0.90
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
The answer is given to two parts as the explanation that a decimal can not be accurately represented via binary and that the constructors for BidDecimal should be with more accuracy. Thanks Everyone.
Look at this recent question with solution:
https://www.experts-exchange.com/questions/27240925/how-to-round.html?sfQueryTermInfo=1+10+30+bigdecim+yan
Open in new window