2017-05-11 43 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