2011-02-10 5 views
36

"$ 45.59"のような文字列を10進数で解析しようとしています。何らかの理由で、入力が正しい形式でないという例外が発生しています。これはグローバルプログラムにはならないので、私はすべてのローカリゼーションに関心がありません。ここに私がやっていることがあります。何か問題は見えますか?10進数の通貨テキストを解析する際に問題が発生する

NumberFormatInfo MyNFI = new NumberFormatInfo(); 
MyNFI.NegativeSign = "-"; 
MyNFI.NumberDecimalSeparator = "."; 
MyNFI.NumberGroupSeparator = ","; 
MyNFI.CurrencySymbol = "$"; 
decimal d = decimal.Parse("$45.00", MyNFI); // throws exception here... 

答えて

89

どのように使用について:

decimal d = decimal.Parse("$45.00", NumberStyles.Currency); 

Decimal.Parse状態に関するMSDNのドキュメント:。

は「ザ・SパラメータはNumberStyles.Numberスタイルを使用して解釈される。これはつまり、ホワイトスペースと千単位の区切り記号は使用できますが、通貨記号は使用できません。sに含めることができる要素(通貨記号、桁区切り記号、空白など)を明示的に定義するには、Decimal.Parse (文字列、NumberStyles、するIFormatProvider)メソッド

+1

また、あなたの 'NumberFormatInfo'を使いたい場合は、' decimal d = decimal.Parse( "$ 45.00"、NumberStyles.Currency、MyNFI); ' –

+1

それを修正しました。私は最初のアプローチがうまくいかなかった理由を理解したいと思います... – PICyourBrain

+1

Decimal.Parseに関するMSDNのドキュメント:「sパラメータはNumberStyles.Numberスタイルを使用して解釈されます。つまり、空白と桁区切りが許可されますがsに存在することができる要素(通貨記号、桁区切り記号、空白など)を明示的に定義するには、Decimal.Parse(String、NumberStyles、IFormatProvider)メソッドを使用します。 –

11

それは私の作品。この方法:

NumberFormatInfo MyNFI = new NumberFormatInfo(); 
MyNFI.NegativeSign = "-"; 
MyNFI.CurrencyDecimalSeparator = "."; 
MyNFI.CurrencyGroupSeparator = ","; 
MyNFI.CurrencySymbol = "$"; 

decimal d = decimal.Parse("$45.00", NumberStyles.Currency, MyNFI); 

1)あなたは、代わりに数セパレータの通貨セパレータを定義する必要があります。 2.)通貨値のみを定義したため、解析中にNumberStyles.Currencyを定義する必要があります。

関連する問題