[Haskell-cafe] How to calculate de number of digits of an integer? (was: Is logBase right?)

Eugene Kirpichov ekirpichov at gmail.com
Sat Aug 22 13:23:47 EDT 2009


Use 'round' instead of 'truncate'.

Prelude> let numDigits = (+1) . round . logBase 10 . fromIntegral
Prelude> map (numDigits . (10^)) [0..9]
[1,2,3,4,5,6,7,8,9,10]

2009/8/22 Roberto López <plastermoso at hotmail.com>:
> Ok. I wonder if someone could help me with this problem...
>
> I want to calculate the number of digits of a positive integer. I was
> thinking of ...
>
>        numDigits n = truncate (logBase 10 n) + 1
>
> But (logBase 10 1000) = 2.9999999999999996 so numDigits 1000 = 2.
>
> Maybe adding a small amount
>
>        numDigits n = truncate ((logBase 10 n) + 0.0000000000000005) + 1
>
> Prelude> numDigits 100
> 3
> Prelude> numDigits 1000
> 4
> Prelude> numDigits 10000
> 5
> Prelude> numDigits 10000
> 5
> Prelude> numDigits 100000
> 6
> Prelude> numDigits 1000000
> 7
> Prelude> numDigits 10000000
> 8
> Prelude> numDigits 100000000
> 9
> Prelude> numDigits 1000000000
> 9                                          <---- This is wrong!!!!
> Prelude> numDigits 10000000000
> 11
>
> Is there a reliable way to calculate the number of digits by means of
> logBase?
>
>
> Regards!
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



-- 
Eugene Kirpichov
Web IR developer, market.yandex.ru


More information about the Haskell-Cafe mailing list