官术网_书友最值得收藏!

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...

  1. We will need to import the following two functions:
    import Data.Char (intToDigit, chr, ord) 
    import Numeric (showIntAtBase)
  2. Define a function to represent a number in a particular base as follows:
    n 'inBase' b = showIntAtBase b numToLetter n ""
  3. 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)
  4. 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
  5. The following is the printed output when running the code:
    $ runhaskell Main.hs
    
    8
    a
    10
    3b
    

How it works...

The showIntAtBase function takes in a base, the desired number, and its mapping from number to printable digit. We order our digits in the following manner: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, and so on, up to 36 characters. Putting it all together, we get a convenient way to represent a decimal number in any base.

See also

To read a string representing a number from another base as a decimal integer, refer to the Reading a number from another base recipe.

主站蜘蛛池模板: 宣武区| 张掖市| 鄂伦春自治旗| 阳原县| 宣化县| 盐池县| 达州市| 承德市| 葵青区| 合川市| 普陀区| 新巴尔虎右旗| 平泉县| 城步| 滕州市| 称多县| 松江区| 远安县| 遂川县| 平湖市| 济源市| 罗平县| 海原县| 鄯善县| 布尔津县| 启东市| 当阳市| 石台县| 静海县| 蕲春县| 英德市| 巧家县| 凌云县| 汕头市| 海丰县| 扶绥县| 中江县| 乐山市| 梓潼县| 襄城县| 阜宁县|