[squeak-dev] ScaledDecimal newFromNumber: 0.0 scale: 0 can't print
nicolas.cellier.aka.nice at gmail.com
Wed Sep 7 17:22:11 UTC 2011
And I just checked, and:
1) the senders of isFraction would work equally well if
Integer>>isFraction did answer true.
This is because they only expect the fraction to answer to
#numerator and #denominator, and Integer does that quite well
2) this would fast up mixed Integer/Fraction arithmetic.
3) the senders of asFraction that really expect a Fraction are
* Fraction>>adaptToInteger: rcvr andSend: selector
* Integer>>adaptToFraction: rcvr andSend: selector
But the later would be useless if Integer>>isFraction did answer true.
4) the other senders of #asFraction are in ScaledDecimal and don't
care whether the Fraction really is a Fraction or an Integer
So it might be time to enforce this peculiarity:
"Answer true because every Integer is polymorphic with a Fraction."
2011/9/7 Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com>:
> OK, I had a chance to open an image and I see I'm responsible for this problem.
> Levente changed the printing method, I recognized an already existing
> Fraction>>printTruncatedOn:showingDecimalPlaces: and decided to use
> it. But this message is not Integer friendly indeed.
> Otherwise, there is no problem if the fraction ivar is an Integer, it
> alerady was before, and can continue to be, as long as Integer
> instances are polymorphic to Fraction (what they mostly are).
> I gonna correct the mess this evening, thanks for reporting!
> 2011/9/7 Frank Shearar <frank.shearar at gmail.com>:
>> On 7 September 2011 12:32, Nicolas Cellier
>> <nicolas.cellier.aka.nice at gmail.com> wrote:
>>> Isn't it also the case with (ScaledDecimal newFromNumber: 1.0 scale: 0) ?
>> It's true for any integral-valued float. Somewhere near the bottom of
>> Float >> #asTrueFraction the line
>> result := signedFraction bitShift: zeroBitsCount negated
>> returns an Integer.
>> Presumably (and I'm really just guessing here), we could say
>> result := Fraction
>> numerator: (signedFraction bitShift: zeroBitsCount negated)
>> denominator: 1
>>> 2011/9/7 Frank Shearar <frank.shearar at gmail.com>:
>>>> Evaluate the following:
>>>> 0s0 "=> 0s0"
>>>> ScaledDecimal newFromNumber: 0 scale: 0 "=> 0s0"
>>>> 0.0s0 "=> 0s0"
>>>> ScaledDecimal newFromNumber: 0.0 scale: 0 "=> MNU: SmallInteger
>>>> doesn't understand printTruncatedOn:showingDecimalPlaces:"
>>>> The MNU happens because in ScaledDecimal class >> #newFromNumber:scale: we say
>>>> "..." aNumber asFraction "..."
>>>> and when aNumber = 0.0, aNumber asFraction = 0, which is a
>>>> SmallInteger and not a Fraction.
>>>> (Recorded as http://bugs.squeak.org/view.php?id=7667)
More information about the Squeak-dev