I know the problem with double/float, and it’s recommended to use BigDecimal instead of double/float to represent monetary fields. But double/float is more effective and space-saving. Then my question is:
It’s acceptable to use double/float to represent monetary fields in Java class, but use BigDecimal to take care of the arithmetic (i.e. convert double/float to BigDecimal before any arithmetic) and equal-checking?
The reason is to save some space. And I really see lots of projects are using double/float to represent the monetary fields.
Is there any pitfall for this?
Thanks in advance.
No, you can’t.
Suppose
doubleis enough to store two valuesxandy. Then you convert them to safeBigDecimaland multiple them. The result is accurate, however if you store the multiplication result back indouble, chances are you will loose the precision. Proof:Results:
xandyare accurate, as well as the multiplication usingBigDecimal. However after casting back todoublewe loose least significant digits.