我希望将“0000”之类的内容转换为0000.
当我使用
时read "0000" :: Int
结果是
0
非常感谢!
答案 0 :(得分:6)
类型0000
没有Int
与0
不同,所以这是不可能的。这并不是Haskell所特有的:你会在任何其他语言中看到相同的数字类型(即基本上任何语言都是如此)。
但是当你说"结果是0
"时,你应该更正确地说结果打印为 0
,通常你将具有允许您打印与0000
相同的值的功能,但同样不会区分0
和0000
整数值。
如果要保留此信息,则需要使用其他类型。哪一个,取决于你究竟需要什么。例如。它可能是
data Digits = Digits [Int]
其中列表的每个元素都是从0
到9
(或直接使用[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