ScaledDecimal scale after calculation

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
bpi
Reply | Threaded
Open this post in threaded view
|

ScaledDecimal scale after calculation

bpi
Hi,

For my accounting I like to use ScaledDecimal, knowing it is just a fraction with a scale.

I just stumbled upon the following:
0.1s * 0.5s. "0.0s1"

The underlying fraction is correct (1/20). However, the scale is 1, which surprised me. Shouldn't the scale be 2?

In VA Smalltalk which I use for accounting as well the multiplication results in 0.05s2, which I had expected. (It prints as 0.05, though.)

Fraction>>#asScaledDecimal even has the needed code:
"Convert the receiver to a ScaledDecimal.
        If there is a finite decimal representation of the receiver, then use the exact number of decimal places required.
        Else, use a default number of decimals."

(1/20) asScaledDecimal. "0.05s2"

Some other strangeness:
3s scale. "0"
3 asScaledDecimal scale. "0"
3s asScaledDecimal scale. "8"

ScaledDecimal>>#asScaledDecimal should probably just return self.

What do you think?

- Bernhard



Reply | Threaded
Open this post in threaded view
|

Re: ScaledDecimal scale after calculation

Nicolas Cellier


Le lun. 10 juin 2019 à 17:33, Bernhard Pieber <[hidden email]> a écrit :
Hi,

For my accounting I like to use ScaledDecimal, knowing it is just a fraction with a scale.

I just stumbled upon the following:
0.1s * 0.5s. "0.0s1"

The underlying fraction is correct (1/20). However, the scale is 1, which surprised me. Shouldn't the scale be 2?

Maybe... But then what scale to use for division?

In VA Smalltalk which I use for accounting as well the multiplication results in 0.05s2, which I had expected. (It prints as 0.05, though.)

Fraction>>#asScaledDecimal even has the needed code:
"Convert the receiver to a ScaledDecimal.
        If there is a finite decimal representation of the receiver, then use the exact number of decimal places required.
        Else, use a default number of decimals."

(1/20) asScaledDecimal. "0.05s2"

Some other strangeness:
3s scale. "0"
3 asScaledDecimal scale. "0"
3s asScaledDecimal scale. "8"

ScaledDecimal>>#asScaledDecimal should probably just return self.

+1

What do you think?

- Bernhard





bpi
Reply | Threaded
Open this post in threaded view
|

Re: ScaledDecimal scale after calculation

bpi
Wouldn't it be possible to do fraction division and then use the scale from the resulting Fraction>>#asScaledDecimal?

- Bernhard

> Am 10.06.2019 um 18:01 schrieb Nicolas Cellier <[hidden email]>:
>
>
>
> Le lun. 10 juin 2019 à 17:33, Bernhard Pieber <[hidden email]> a écrit :
> Hi,
>
> For my accounting I like to use ScaledDecimal, knowing it is just a fraction with a scale.
>
> I just stumbled upon the following:
> 0.1s * 0.5s. "0.0s1"
>
> The underlying fraction is correct (1/20). However, the scale is 1, which surprised me. Shouldn't the scale be 2?
>
> Maybe... But then what scale to use for division?
>
> In VA Smalltalk which I use for accounting as well the multiplication results in 0.05s2, which I had expected. (It prints as 0.05, though.)
>
> Fraction>>#asScaledDecimal even has the needed code:
> "Convert the receiver to a ScaledDecimal.
>         If there is a finite decimal representation of the receiver, then use the exact number of decimal places required.
>         Else, use a default number of decimals."
>
> (1/20) asScaledDecimal. "0.05s2"
>
> Some other strangeness:
> 3s scale. "0"
> 3 asScaledDecimal scale. "0"
> 3s asScaledDecimal scale. "8"
>
> ScaledDecimal>>#asScaledDecimal should probably just return self.
>
> +1
>
> What do you think?
>
> - Bernhard