6 ms·
Speaking from experience, if you exclusively deal with integers internally and then apply the appropriate formatting when outputting to the user (which you need
by luhn 7y ago
Speaking from experience, if you exclusively deal with integers internally and then apply the appropriate formatting when outputting to the user (which you need to deal with regardless of internal representation), it makes dealing with monetary data so much easier. Integers are generally better supported, faster, and more convenient for most languages, databases, and serialization formats.
- gen220 7y ago+1 adding my anecdata to this. If you don’t need irrational numbers (few financial applications do?), the tuple of (value, scale) can take you very far.
- utxaa 7y agoyou never really deal with irrationals ... do you mean floating point?
- gen220 7y agoNope, specifically meant irrationals. Floating point (up to a certain amount of absurdity) you can describe with integers (value, scale). Real numbers you can describe with integers (numerator, denominator, scale). Irrationals are more difficult. That's why we try not to use them :). Hopefully your company's commission tiers are not defined in terms of circles or euclidean distances.
- fetbaffe 7y agoDo you then use variable length for the precision depending on the currency?
- patrickthebold 7y agoHow do you handle things like multiplying by some interest rate of 3.125 or (1 + 0.03125)^-354 as examples. Sure you can round at the end but then you have to worry about compounding errors.
- anoonmoose 7y agoI think that's just part of the process of deciding how small an increment each integer represents (dollars, cents, centi-cents, milli-cents).
- elcritch 7y agoAccounting rules often care more about consistency than precision per se. As long as the code follows accepted accounting rules (say bankers rounding) choosing a known precision works. Often GAAP and other standards don’t define all details for, say amortization, but if you use a scheme the code should always use that method.
- miohtama 7y agoNumeric type, as supported by other SQL databases, does exactly this. I do not want reinvent it on the application level. I know how to do it, it is just not practical.