将零字符串转换为Int(保留零)

时间:2017-05-11 14:31:18

标签: haskell

我希望将“0000”之类的内容转换为0000.

当我使用

read "0000" :: Int

结果是

0

非常感谢!

2 个答案:

答案 0 :(得分:6)

类型0000没有Int0不同,所以这是不可能的。这并不是Haskell所特有的:你会在任何其他语言中看到相同的数字类型(即基本上任何语言都是如此)。

但是当你说"结果是0"时,你应该更正确地说结果打印为 0,通常你将具有允许您打印与0000相同的值的功能,但同样不会区分00000整数值。

如果要保留此信息,则需要使用其他类型。哪一个,取决于你究竟需要什么。例如。它可能是

data Digits = Digits [Int]

其中列表的每个元素都是从09(或直接使用[Int])。或

data IntWithPaddingZeros = IntWithPaddingZeros { value :: Int, paddingZeros :: Int }

答案 1 :(得分:3)

您必须定义一个新的数据类型,如MyInt或说Mint,并告诉编译器如何显示它。

data Mint = M Int
instance Show Mint where
  show (M n) = "000" ++ show n

*Main> M 7
0007

这当然是一个非常简单的例子。您可以想出一个更概念性的显示函数,如果整数超过1位,可以推导出要添加的零的数量。

好的,让我们进一步发展我们的展示功能......

data Mint = M Int
instance Show Mint where
  show (M n) = replicate (3 - (round . (logBase 10) . fromIntegral) n ) '0' ++ show n

*Main> M 133
0133
*Main> M 22
0022
*Main> M 0
0000
*Main> M 1453
1453