formatting of currency values in kmmsplits table

Chris DeveloperChris at rebel.com.au
Tue Nov 15 08:08:44 GMT 2022


Thanks

I have always used integer's, never floats or doubles, I realised back in 
the 90's that was a mistake when implementing credit card transactions. 
Rounding errors bite hard.

I have always decided at the start of a project what was the maximum 
precision needed, usually 2 decimal places but occasionally more. I can see 
with kmymoney 4 digits is the best because I believe that is normal for 
shares. however I don't do shares so I could be wrong.

Just looked it up, shares below $1.00 is to 4 decimal places, 2 places 
otherwise.

I can see storing it using numerator denominator is more flexible.

Chris

On 15/11/2022 5:42 pm, Thomas Baumgart via KMyMoney-devel wrote:
> On Dienstag, 15. November 2022 01:01:03 CET Chris via KMyMoney-devel wrote:
>
>> I was going through the database tables when a file was stored as sqlcipher.
>>
>> I came across something I haven't seen before and I was wondering why it was
>> that way
>>
>> Transaction values are stored as text strings but with unusual divisors.
>>
>> For example the value 18.95 may be stored as "1895/100" which is 1895
>> divided by 100 = 18.95. All and good
>>
>> but there are other ones which confuse me as to why its done this way.
>>
>> Examples are ...
>>
>> unformatted => formatted
>> 258/25     =>      10.32
>> 124/25     =>     4.96
>> -273/50    =>      -5.46
>> 1/2            =>     0.5
>>
>> Can some one explain why it is done that way?
> See https://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency
> for the details of why we use the "numerator/denominator" representation.
>
> The ones that confuse you are simply canceled to the smallest denominator. That's a
> feature/requirement of the underlying library.
>
>> 124/25     =>     4.96
> 124/25 * 4/4 => 496/100
>


More information about the KMyMoney-devel mailing list