2017-05-11 58 views
0

我希望当我使用字符串转换为INT(保零)

read "0000" :: Int 

的东西,如 “0000” 转换为0000

结果是

0 

许多谢谢!

+0

,什么是0000? – Redu

+0

你为什么要这样? –

+0

@Redu 0000是一个Int –

回答

5

没有0000类型Int这是不同于0,所以这是不可能的。这不是Haskell所特有的:你会看到任何其他语言与数字类型相同(即基本上任何语言)。

但是,当你说:“结果是0”,你应该更正确地说,结果打印为0,一般你将有功能允许您打印相同的值0000,但再次荣获” t区分00000整数值。

如果你想保留这些信息,你需要一个不同的类型。哪一个取决于你需要什么。例如。它可能是

data Digits = Digits [Int] 

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

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

等等

2

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

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

*Main> M 7 
0007 

这当然是一个非常简单的例子。你可以想出一个更概念化的展示函数,如果整数大于1位,它可以推导出要添加的零的数量。

OK,让我们发展我们的表现功能远一点......

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