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

Derek Elkins derek.a.elkins at gmail.com
Sat Aug 22 13:31:31 EDT 2009


2009/8/22 Eugene Kirpichov <ekirpichov at gmail.com>:
> 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]
>

round won't work because 999 is close to 1000.

You simply need to use logBase 10 as a guess and then check the answer, e.g.
numDigits n | n < n'       = e
                  | otherwise = e + 1
    where e = ceiling $ logBase 10 $ fromIntegral n
             n' = 10^e
This will need to special case 0 which it currently doesn't do.


More information about the Haskell-Cafe mailing list