Hi Henry, Esteban, Joachim,

thanks for your opinion!

The ranges of my data are relatively small because my application deals with travel expenses, e.g. Hotel receipts, Taxi receipts, Flights et. So, 99,99% of all my amounts are less than 10.000 Euro.��

So I will try it with the Float solution and use a scale of 4.

...and I will indeed add checking for range! Good point, I do not have this yet.

Sabine



On Mon, Aug 19, 2013 at 12:48 PM, Henrik Sperre Johansen [via Smalltalk] <[hidden email]> wrote:

On Aug 19, 2013, at 10:38 , Sabine Kn��fel <[hidden email]> wrote:

> Hi,
>
> I am interested in your opinion.
> I use FixedDecimal for computing currency amounts.
> This works fine.
>
> When storing the amounts with voyage into mongo (I have a lot of them!!!),
> normally, one currency amount would be stored into mongo as follows:
>
> �� �� �� �� �� "vatAmountEUR": {
> �� �� �� �� �� �� "#instanceOf": "FixedDecimal",
> �� �� �� �� �� �� "negative": false,
> �� �� �� �� �� �� "number": NumberInt(90280),
> �� �� �� �� �� �� "part1": NumberInt(9),
> �� �� �� �� �� �� "part2": NumberInt(280),
> �� �� �� �� �� �� "scale": NumberInt(4)
> �� �� �� �� ��}
>
> I think, this is a lot of stuff for one single value. I tend to convert the
> FixedDecimal into a Float for storing it. In this case, it would be like
> this:
>
> "vatAmountEUR": 0.7196
>
> When loading, I immediately re-convert it into a FixedDecimal. I would do NO
> computing with the float(!!).
>
> What is your opinion about this (rounding issues, performance, database size
> etc.)?
> Do you think, there is something against it? What would you do?
>
> Sabine
There are rounding issues even without doing arithmetic, conversion scaled -> float WILL inherently be lossy due to float's fixed size.
You are only ensured 15 decimal digits of precision with 64-bit floating point numbers like in Pharo (BSON Doubles):
98765432109.87658s5 asFloat asScaledDecimal: 5 98765432109.87659s5

Though, Compared to using NumberInt ( a signed 32-bit integer, with max 9 digits) for storing the unscaled number, it's actually the better option���

I guess the morale is, either way, as long as you are storing values in fixed size data fields (and not say, a String), you need some checks in place to ensure the numbers you are saving are within valid ranges. ;)

Cheers,
Henry


signature.asc (859 bytes) Download Attachment



If you reply to this email, your message will be added to the discussion below:
http://forum.world.st/your-opinion-about-storing-FixedDecimal-in-Mongo-tp4704104p4704124.html
To unsubscribe from your opinion about storing FixedDecimal in Mongo, click here.
NAML



View this message in context: Re: your opinion about storing FixedDecimal in Mongo
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.