java - new BigDecimal(double) vs new BigDecimal(String) -


when bigdecimal used input of double , bigdecimal input of string different results seem appear.

bigdecimal = new bigdecimal(0.333333333); bigdecimal b = new bigdecimal(0.666666666);  bigdecimal c = new bigdecimal("0.333333333"); bigdecimal d = new bigdecimal("0.666666666");  bigdecimal x = a.multiply(b); bigdecimal y = c.multiply(d);  system.out.println(x); system.out.println(y); 

x outputs as

0.222222221777777790569747304508155316795087227497352441864147715340493949298661391367204487323760986328125 

while y is

0.222222221777777778 

am wrong in saying because of double imprecision? since bigdecimal, shouldn't same?

am wrong in saying because of double imprecision?

you absolutely right, because of double's imprecision.

but since bigdecimal, shouldn't same?

no, shouldn't. error introduced moment create new bigdecimal(0.333333333), because 0.333333333 constant has error embedded in it. @ point there nothing can fix representation error: proverbial horse out of barn then, it's late close doors.

when pass string, on other hand, decimal representation matches string exactly, different result.


Comments

Popular posts from this blog

css - SVG using textPath a symbol not rendering in Firefox -

Java 8 + Maven Javadoc plugin: Error fetching URL -

node.js - How to abort query on demand using Neo4j drivers -