5.3 printShowingDecimalPlaces: 2 displays '5.29' insteadof'5.30'
Sebastian Sastre
ssastre at seaswork.com
Thu Nov 22 20:39:10 UTC 2007
Ok, don't beat me.. I'm not proud of this but I have to use until I manage
to have something better.
String>>asScaledDecimal: aQuantityOfDigits
"Answers the scaled decimal with aQuantityOfDigits
of precision represented by the receiver."
^ [:number|
number isZero
ifTrue:[0 asFloat asScaledDecimal: aQuantityOfDigits]
ifFalse:[number asScaledDecimal: aQuantityOfDigits]] value: self asNumber
so my converter can do this depending on it's own configuration (not only
used for money):
MVPNumberToText>>rightToLeft: aString
"Answers the result of converting aString to a Number or aScaledDecimal."
^self hasInputDigits
ifTrue:[aString asScaledDecimal: inputDigits]
ifFalse:[aString asNumber]
Adding the horrible hack:
ScaledDecimal>>printOn: aStream
"Reimplementation - Object 'printing' method."
| aFraction tmpFractionPart |
self < 0 ifTrue: [aStream nextPut: $-].
aFraction := fraction abs.
aStream nextPutAll: aFraction rounded printString.
scale = 0 ifTrue: [^ aStream nextPutAll: 's0'].
aStream nextPut: $..
tmpFractionPart := aFraction fractionPart.
1 to: scale
do:
[:dummy |
tmpFractionPart := tmpFractionPart * 10.
(10 <= tmpFractionPart rounded)
ifTrue:[aStream nextPut: $0]
ifFalse:[aStream nextPut: (Character digitValue: tmpFractionPart
rounded)].
tmpFractionPart := tmpFractionPart fractionPart].
I was able to make the values to behave,
thanks,
Sebastian Sastre
_____
De: squeak-dev-bounces at lists.squeakfoundation.org
[mailto:squeak-dev-bounces at lists.squeakfoundation.org] En nombre de tim
Rowledge
Enviado el: Jueves, 22 de Noviembre de 2007 17:10
Para: The general-purpose Squeak developers list
Asunto: Re: 5.3 printShowingDecimalPlaces: 2 displays '5.29' insteadof'5.30'
On 22-Nov-07, at 11:00 AM, Sebastian Sastre wrote:
Thanks Tim,
may be I should clarify that it's only for presentation. The mone value
is stored as anMeasure of it's monetary unit in the Aconcagua framework.
But I'm curious about your answer. Let's supose the user enters in some
input widget with keyboard the '5.30' value. That will end as a Float at
some point. Do you suggest I convert that to a ScaledDecimal? (to
store/comare, etc)?
I'm evaluating this:
(5.3 asScaledDecimal: 2)
and also obtainig: ' 5.29s2'
That must surely count as a bug and I'd hazard a guess that it happens
because some code is comparing floats; I've not looked at the code but I've
seen it too many times not to suspect it.
As for your input widget, I'd try to make it give you the string and
directly convert that to a 2dp scaled decimal rather than letting it give
you a float. If there isn't a String>asScaledFloat: type method then I guess
you get to write it :-)
tim
--
tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim
All the simple programs have been written, and all the good names taken.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20071122/74cff927/attachment.htm
More information about the Squeak-dev
mailing list
|