On 2008 April 13 (Sun) 12:43:22pm PDT, Aladdin Lamp? <[EMAIL PROTECTED]> wrote:
> Thank you Nicolas for your answer. I understand that an int64
> certainly gives me enough precision in the general case.
>
> Now what am I supposed to do if the user decides to add a virtual 4
> decimal digits number to another number which has only 2 decimal
> digits? I should first identify this and then multiply by 100 the
> second number in order to be able to use sqlite built-in operators
> and functions... Not so simple, I think...
>
> And in my case, it is the user who determines the precision he
> desires for each number within the application, so I cannot have the
> precision fixed once for all like you suggest.
>
> Aladdin

You may want to look at <http://www2.hursley.ibm.com/decimal/>, which
is about "General Decimal Arithmetic."  There's a lot of information
there about doing decimal arithmetic, both in fixed-size and
arbitrary-precision.  You can download implementations with very
liberal licenses too.



>> Date: Sun, 13 Apr 2008 13:41:46 -0500
>> From: [EMAIL PROTECTED]
>> To: sqlite-users@sqlite.org
>> Subject: Re: [sqlite] Dealing with monetary huge values in sqlite
>> 
>> On Sun, Apr 13, 2008 at 07:37:33PM +0200, Aladdin Lamp? wrote:
>>> In my opinion (please tell me if I'm wrong), your method only works if
>>> you want to *display* the values in your column, and if the decimal
>>> precision doesn't change form line to line.
>>> 
>>> I would like to be able to perform operations (+, /, %, etc.) and to
>>> store intermediary results into other columns (such as x% of the
>>> value, etc.), which may have an arbitrary precision, and - only at the
>>> end - round the result to cents/pennies etc. This is required into the
>>> technical specifications provided by my client, because high precision
>>> matters for them. Indeed, an error of 0.01$ on 10,000,000 lines would
>>> lead to a significant error at the end...
>> 
>> The proposed method allows you do perform arithmetic operations using
>> SQLite's built-in operators and functions.
>> 
>> If the greatest error your customer is willing to accept is, say, one
>> part in a million (that is, a millionth of a cent), then using 64-bit
>> would allow you to represent values up to ~ 10e13 -- 10 trillion, not so
>> much, but perhaps good enough for you.
>> 
>> If the tolerance is more like one in 10,000 ($0.0000001), then you can
>> represent up to ~ 1,000 trillion as the largest value. That's still
>> pretty small, IMO, but almost certainly good enough for you.
>> 
>> You can adjust where you put the virtual fixed point. If you can't find
>> a suitable break then you should consider your arbitrary precision
>> extended function function scheme (or a database engine that provides
>> the features you need).
>> 
>> Nico
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to