Yes, if you want ith decimalDigit of integer n, 1 being least significant digit, then you shall write the division with a method like: decimalDigitOfRank: i "Answer the ith decimal digit, i=1 being the least significant digit" ^self // (10 raisedTo: i - 1) \\ 10 However, the awfull method you proposed might be faster if your intention is to scan all digits on very large numbers, because printString is optimized. Nicolas 2011/5/2 Bernat Romagosa <tibabenfortlapalanca@gmail.com>:
Ouch, understood! Then what would be the proper way to address a decimal digit in a number? I can only think of (bigNumber asString at: index) asNumber, which is... awful.
2011/5/2 Sven Van Caekenberghe <sven@beta9.be>
Bernat,
On 02 May 2011, at 11:13, Bernat Romagosa wrote:
Hi, try to run the following:
(2 raisedTo: 100000) digitAt: 1
The expected result (if I understood what digitAt: should return) is 9, but the message returns 0 instead. In fact, it returns 0 for any index.
Is this a bug or am I missunderstanding how digitAt: should work?
Cheers,
Bernat Romagosa.
p.s. My config is Pharo 1.2 with a 'Croquet Closure Cog VM [CoInterpreter VMMaker-oscog.51]' on Debian Lenny.
Consider,
2 raisedTo: 32
#digitAt: for digits 1 to 4 returns 0, 5 return 1. From the comments you can see that the number is looked at in base 256. The above number thus has 5 digits in this base, four are zero and the highest one is one. Furthermore, the first digit is the lowest one. If you inspect the number it might become clearer.
Any #digitAt: has to depend on the base you use to represent the number, this one doesn't, so it seems to be useful only to return internal parts of a number.
HTH,
Sven