[BUG][FIX]numbers in scientific notation with capital E are not handled correctly (not good)

Bert Freudenberg bert at impara.de
Wed Dec 1 18:33:48 UTC 2004


Am 01.12.2004 um 10:15 schrieb Baveco, Hans:

> I have often been bit by this feature of squeak. '1234.123E-5' 
> asNumber produces 1234.123 because the exponent part is ignored. Some 
> numeric software produces output in this format, and reading datafiles 
> from such programs may lead to very hard to trace anomalies 
> (especially when scientific notation is only used for some of the 
> numbers). A simple one-liner change in 
> Number>>readRemainderOf:from:base:withSign: seems sufficient to handle 
> capital E, see attached fileout.
>
> I changed "peekChar = $e | (peekChar = $d) | (peekChar = $q)"
>
> to "((((peekChar == $e) or: [peekChar == $E]) or: [peekChar == $d]) 
> or: [peekChar == $q])"
>
> (I compensated for the extra check by replacing the bars by blocks).
>
> I can't imagine there are any unwelcome side-effects associated with 
> this change?

It changes the language, as this method is also used for reading 
literal numbers. I've been down that road before and was educated by 
Dan Ingalls that things are as they are for a reason.

The reason in this case is that uppercase letters are reserved for 
digits (think hexadecimal). You can enter literal floats up to base 36 
in Smalltalk: 16rABC.DEF

So, just convert your numbers to lowercase before reading them in.

- Bert -




More information about the Squeak-dev mailing list