Skip to content
Advertisement

fixed point arithmetics in java with fast performance

I need to represent some numbers in Java with perfect precision and fixed number of decimal points after decimal point; after that decimal point, I don’t care. (More concretely – money and percentages.)

I used Java’s own BigDecimal now, but I found out, that it’s really slow and it starts to show in my application.

So I want to solve it with a “regular” integers and a fixed-point arithmetics (long integers have big enough precision for my purposes).

Now, I would think that I am not the first one who has this kind of problem and there would be already a library for that, that already has multiplication/division implemented – but it seems that it isn’t.

Now, I very probably can write it myself (and I probably will), but really, am I really the first person that needs this? Isn’t there already some library for that?

Advertisement

Answer

Are you completely sure BigDecimal is the performance problem? Did you use a profiler to find out? If yes, two options that could help are:

1) Use long and multiply all values by a factor (for example 100 if you are interested in cents).

2) Use a specially designed class that implements something similar to BigDecimal, but using long internally. I don’t know if a good open source library exists (maybe the Java Math Fixed Point Library?). I wrote one such class myself quite a long time ago (2001 I believe) for J2ME. It’s a bit tricky to get right. Please note BigDecimal uses a long internally as well except if high precision is needed, so this solution will only help a tiny bit in most cases.

Using double isn’t a good option in many cases, because of rounding and precision problems.

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement