2017-05-11 6 views
0

私は変換文字列(ゼロを保持)

read "0000" :: Int 

を使用すると、結果が

0 

多くある0000

に "0000" のようなものを変換したいですありがとう!

+0

をし、0000は何ですか? – Redu

+0

なぜそれが欲しいのですか? –

+0

@Redu 0000はInt –

答えて

5

0とは異なるInt0000が存在しないため、これはできません。これはHaskellに固有のものではありません。数値型(つまり、基本的にはどの言語でも)の他の言語でも同様です。

しかし、あなたは「結果は0である」と言うとき、あなたはより正確に「その結果は0として印刷されており、一般的にあなたが0000と同じ値を印刷できるようにする機能を持っていますが、再び勝ったと言うべきです00000の整数値を区別します。

この情報を保持したい場合は、別のタイプが必要です。どちらが必要なのかによって決まります。例えば。それは

data Digits = Digits [Int] 

リストの各要素は0から9に(または直接[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