[dev] Best strategy to store money values
Luis Felipe Marzagao/Andamentos
lfbm.andamentos at gmail.com
Wed Aug 17 12:08:19 UTC 2011
Em 17/08/11 05:06, Jan Schneider escreveu:
>
> Zitat von Luis Felipe Marzagao/Andamentos <lfbm.andamentos at gmail.com>:
>
>> Em 16-08-2011 04:54, Jan Schneider escreveu:
>>>
>>> Zitat von Luis Felipe Marzagao <lfbm.andamentos at gmail.com>:
>>>
>>>> Hello:
>>>>
>>>> I´m using Horde_Rdo, which, by the way, is fantastic, in order to
>>>> develop an app to control clients' credits and debits.
>>>>
>>>> My first impulse was to store the money amount of each transaction as
>>>> decimal(10,2) (the backend I´m testing is mysql, but I´d like to keep
>>>> things as abstracted as possible, taking advantage of Horde_Rdo).
>>>>
>>>> But then I got confused about what type of Horde_Form variable and
>>>> column type (in migration style terms) should I use.
>>>>
>>>> I have never developed any app involving money values and
>>>> calculations, so I could use some advice concerning the best
>>>> strategy/practice before I invest time going the wrong direction.
>>>>
>>>> Any pointers are appreciated.
>>>
>>> The form type should be "number", the column type "float".
>>>
>>> Jan.
>>>
>> Thanks. I still have to do some manually conversion, because the
>> "number" form type only validates and returns the number wih your
>> local decimal point (in my case the comma ',', not the point '.'),
>> which is not accepted by mysql float type. It seems mysql expects to
>> receive a pointed decimal number (like 500.10), otherwise it will
>> loose the digits after the decimal point. But this is something
>> manageable.
>
> Just make sure that the value passed to Horde_Db is really a float.
> And you need an up-to-date Horde_Db version, because older versions
> had a bug with float values.
>
No problem.
>> Let me enjoy the opportunity to ask how do I tell migrations create
>> the column type 'float' with the options (12,2), twelve digits, two
>> being after the decimal point. I can't find any reference on how to
>> pass the correct parameters to $t->column( .... array(????));
>
> Hm, the code is a bit confusing, maybe you need to use 'decimal'
> instead of 'float'. In any case, it takes 'precision' and 'scale'
> options.
>
Okay, I confirm using 'decimal' as column type and 'precision' and
'scale' in migration has worked. In mysql the column was created as
decimal(12,2).
> Jan.
>
Thanks.
Luis Felipe
More information about the dev
mailing list