I'l looking for an idiomatic (perhaps built-in) way of padding string representations of integers with zeros on the left.
In my case the integers are never more than 99 so
fix r = if length r == 1 then '0':r else r
fix.show <$> [1..15]
works. But I expect there is a better way.
How do I pad string representations of integers in Haskell?
printf
style formatting is availble via the Text.Printf
module:
import Text.Printf
fmt x = printf "%02d" x
Or to special case the formatting of 0:
fmt 0 = " "
fmt x = printf "%02d" x
> (\x -> replicate (3 - length x) '0' ++ x) "2"
"002"
> (\x -> replicate (3 - length x) '0' ++ x) "42"
"042"
> (\x -> replicate (3 - length x) '0' ++ x) "142"
"142"
> (\x -> replicate (3 - length x) '0' ++ x) "5142"
"5142"
The above exploits the fact that replicate
returns the empty string on negative argument.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With