Java and Technology weblog
I’ve been writing some code recently that required dealing with monetary values but, as hard as it is to believe, there still doesn’t seem to be a great solution for money in Java. I’ve known for a while that float and double should never be used for representing money, or indeed anywhere exact values are required (e.g. 1 – 0.9 may give you something like 0.09999999999999998). Using long or int gives exact answers but requires keeping track of the decimal point yourself, which is a pain. A common approach is to use BigDecimal, but that is not without its limitations either e.g. it is certainly clunkier to use than primitives, and slower, and the rules for rounding and presentation seem a little complex.
Another solution is to use timeandmoney. It is a little worrying that it is still pre-alpha (v0.5.1 at time of writing), but I am going to go with it in the absence of any better contenders.