> No, no, no.
> Don't use Float.
> Float are INEXACT
> 
> (( 0.33333 asScaledDecimal: 5 )+  (0.33333 asScaledDecimal: 5 ) ) *6 = 
> 3.99996s5
>  -> FALSE !
> 
> Nicolas

> I don't know what ScaledDecimal expectations are or should be.
> By now, you are in charge or performing the rounding operation by yourself
> 
> ( (1/3) asScaledDecimal: 2) roundTo: 0.01s2.
> 
> We may add more convenient #roundToPrecision, and #roundToPrecision:
> But you could also truncate, fllor or ceil...
> 
> Nicolas

> On Fri, May 20, 2011 at 7:57 AM, Ralph Boland <rpbol...@gmail.com> wrote:
>> Dealing with ScaledDecimal is a complicated matter and I have probably failed
>> to appreciate many of the complications but whoever is implementing
>> ScaledDecimal
>> (and Smalltalk needs ScaledDecimal) needs to appreciate those complications.
>> Anybody here a financial expert?
>> 
> 
> I am not a financial expert, but this is how ScaledDecimal works, in
> both Squeak/Pharo and I believe other implementations, too.
> 
> I did run into this previously and it bugged me enough that I created
> FixedDecimal (at http://www.squeaksource.com/FixedDecimal.html ). It
> does not keep an internal more precise number - it keeps exactly what
> it shows you.  (Although the implementation is somewhat odd - it does
> do what it is supposed to do.)
> 
> -Chris
> 

After Your considerations i do this conclusion for manage ScaledDecimal 
instance with SIXX.

1) the instance reference into the SIXX declaration is based on the 
ScaledDecimal notation :  1234.333s3 

         '<sixx.object sixx.id="0" sixx.type="ScaledDecimal" 
>1234.333s3</sixx.object>
'

2) All the translation is based on it.




Other think is the internal ScaledDecimal represent.

It's important to rounding the data so that the          numerator  and         
denominator    are integer.

I do it wtih method :
        
        roundToPrecision: scalePrecision

        | rnd | 

        rnd:= ScaledDecimal new 
                                setNumerator: 1
                                denominator: (10 raisedTo: scalePrecision)
                                scale: scalePrecision.
        
        ^self roundTo: rnd



The round is automatic when i create ScaledDecimal instance with:        
fromString: aString 


        For example when converter a input string to ScaledDecimal instance 
based on number of digit typed.


        It's required when i do conversion from another Number type:

        ( 1/3 asScaledDecimal: 3 ) roundToPrecision


It's all for now.

        Any pointers would be greatly appreciated !

        Thanks,

                Dario




Reply via email to