Multiplication Anomaly

Can anyone explain this:System.out.println( 0.3 * 0.3 );//prints 0.09System.out.println( 0.2 * 0.2 );//prints 0.04000000000000001ThanksDuncan
[176 byte] By [Duncan_Jacka] at [2007-10-2 21:08:06]
# 1

[url=http://java.sun.com/developer/JDCTechTips/2003/tt0204.html#2]SOME THINGS YOU SHOULD KNOW ABOUT FLOATING-POINT ARITHMETIC[/url]

[url=http://docs.sun.com/source/806-3568/ncg_goldberg.html]What Every Computer Scientist Should Know About Floating-Point Arithmetic[/url]

Another good (slightly simpler) FP explanation:

http://mindprod.com/jgloss/floatingpoint.html

jverda at 2007-7-13 23:53:52 > top of Java-index,Java Essentials,New To Java...
# 2

That happens sometimes. Just import the NumberFormat class (java.text.NumberFormat) create an instance of it and use the setMaximumFractionDigits() method.

It should look like this:

import java.text.NumberFormat; (at beginning)

NumberFormat i = NumberFormat.getNumberInstance();

i.setMaximumFractionDigits(2);

System.out.println(i.format(0.2 * 0.2));--or put a variable in i.format()

jvanlentea at 2007-7-13 23:53:52 > top of Java-index,Java Essentials,New To Java...
# 3
Alrighty then!Thanks for that wake up call to an innocent like me!BigDecimal it is then...no doubt slower with some drawbacks, but I can't live with those issues...Duncan
Duncan_Jacka at 2007-7-13 23:53:52 > top of Java-index,Java Essentials,New To Java...
# 4
Thanks, I can see where this would help (e.g. if the calculations all fit a well-defined pattern).Duncan
Duncan_Jacka at 2007-7-13 23:53:52 > top of Java-index,Java Essentials,New To Java...