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

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.

主站蜘蛛池模板: 山阴县| 仲巴县| 抚顺市| 富锦市| 海丰县| 会同县| 肃南| 南涧| 松江区| 肇庆市| 慈利县| 湖北省| 平度市| 汪清县| 东阳市| 东宁县| 绥棱县| 镇沅| 松潘县| 蓝山县| 东台市| 乌海市| 龙州县| 灵宝市| 镶黄旗| 甘泉县| 汨罗市| 阿拉善右旗| 阜宁县| 玛沁县| 乌苏市| 松滋市| 彭水| 武汉市| 葵青区| 商城县| 乐东| 莲花县| 镇远县| 普陀区| 西林县|