Win a copy of The Way of the Web Tester: A Beginner's Guide to Automating Tests this week in the Testing forum!

# java decimal multiplication

Cindy Jones
Ranch Hand
Posts: 66
Hi,

35.87 * 100 = 3586.9999999999995
not 3587.
1. Why is this?
2. Most other decimal numbers work fine when I use this logic to get the same number as the original number without decimals (after I have removed the part after the decimal point)

Thanks.

Jesper de Jong
Java Cowboy
Saloon Keeper
Posts: 15568
46
Because data types like float and double do not have infinite precision. This does not happen in only in Java, it happens in almost every progamming language that exists.

Have a look at Wikipedia: Floating point. Here's a very technical explanation: What Every Computer Scientist Should Know About Floating-Point Arithmetic.

If you need to write software that deals with for example financial data (money), you shouldn't use float or double. You should use class BigDecimal, which can store an arbitrary number of decimal digits.