Displaying a number in another base
Strings are a natural way to represent numbers in different bases due to the inclusion of letters as digits. This recipe will tell us how to convert a number to a string that can be printed as output.
How to do it...
We will need to import the following two functions:
import Data.Char (intToDigit, chr, ord) import Numeric (showIntAtBase)
Define a function to represent a number in a particular base as follows:
n 'inBase' b = showIntAtBase b numToLetter n ""
Define the mapping between numbers and letters for digits larger than nine as follows:
numToLetter :: Int -> Char numToLetter n | n < 10 = intToDigit n | otherwise = chr (ord 'a' n – 10)
Print out the result using the following code snippet:
main :: IO () main = do putStrLn $ 8 'inBase' 12 putStrLn $ 10 'inBase' 12 putStrLn $ 12 'inBase' 12 putStrLn $ 47 'inBase' 12
The following is the printed output when running the code:
$ runhaskell Main.hs 8 a 10 3b
How it works...
The showIntAtBase
function...