[Seaside] Re: Money ScaledDecimal is it really *appropriate* ?
bert at impara.de
Thu Feb 2 15:33:54 CET 2006
Yes, there's a bug when converting Floats to Scaled Decimals. It's
not precise. This works:
a := ScaledDecimal newFromNumber: 618/100 scale: 4.
b := ScaledDecimal newFromNumber: 5 scale: 4.
a / b "1.2360s4"
This is the problem:
(6.18 * 10e4) rounded / 10e4
So when converting from a Float it should be rounded to scale, IMHO.
You should report this (best along with the fix) on the squeak bug
tracker. And because it's not a Seaside problem, we should continue
the discussion to squeak-dev.
- Bert -
Am 02.02.2006 um 15:13 schrieb Dmitry Dorofeev:
> Assuming I have prices with 2 digits after dot I want to calculate VAT
> with 4 digits precision. VAT May be shown still rounded to 2 digits,
> but some clients want to see even 4 digits after dot !!! With high
> turn over made from small sells it is some real money due to
> rounding errors :-)
> I made some tests and found a funny example:
> a := ScaledDecimal newFromNumber: 6.18 scale: 4.
> b := ScaledDecimal newFromNumber: 5 scale: 4.
> a / b 1.2359s4
> a / b printShowingDecimalPlaces: 4 '1.2360'
> 6.18 / 5.0 1.236
> why a / b shows 2.2359s4 ?
> but (a / b printShowingDecimalPlaces: 4) shows correct answer
> It makes me nervious....
> David T. Lewis wrote:
>> in Wed, Feb 01, 2006 at 02:51:42PM +0300, Dmitry Dorofeev wrote:
>>> this one looks practical.
>>> I am sad there is no Money in Squeak though...
>> Don't be sad, there is ScaledDecimal in Squeak :)
>> Float is *not* appropriate for financial calculations, but
>> ScaledDecimal should be OK. And #printShowingDecimalPlaces: will
>> work with ScaledDecimal also:
>> 123.3453 asScaledDecimal printShowingDecimalPlaces: 2. ==> '123.35'
More information about the Seaside