私は、書き込み処理の誰もが、あなたは言葉の値(数値文字列)がint型または型の値をfloatに変換したい多くの機会がなければならないと考えていますが、言葉の値は時々、通貨記号千単位の区切りがあり、非常にきれいではないかもしれません私は交換してください使用していた前に空白ではなく、さらに10進、そう千または通貨記号のような少し疲れて変換し、周囲の、その後、$記号このような変換を削除しますが、実際には.NET Frameworkの2.0以上を使用している場合それほどのトラブル、あなたはこれらの混乱に対処するための組み込み機能がある、のは、それを行う方法を見てみましょう。
私は、書き込み処理の誰もが、あなたは言葉の値(数値文字列)がint型または型の値をfloatに変換したい多くの機会がなければならないと考えていますが、言葉の値は時々、通貨記号千単位の区切りがあり、非常にきれいではないかもしれません私は交換してください使用していた前に空白ではなく、さらに10進、そう千または通貨記号のような少し疲れて変換し、周囲の、その後、$記号このような変換を削除しますが、実際には.NET Frameworkの2.0以上を使用している場合それほどのトラブル、あなたはこれらの混乱に対処するための組み込み機能がある、のは、それを行う方法を見てみましょう。
使用int.Parseまたはint.TryParse
Int.Parseが間違っていない、それは千を含むint.Parse文字列、変換の通貨記号を使用して行うことができます。
あなたは、このメソッド(方法)を解析して確実に他のパラメータを見ていなかったこと、私はあなたに嘘であると言うかもしれない、パラメータがあるパースSystem.Globalization.NumberStyles列挙型(列挙型)が入ってくる文字列をサンプリングするために使用された声明の中で述べてテーブルを以下の許容、およびメンバーNumberStyles:
名前 | 説明 |
---|---|
無し | あなたは正しいかも進整数である必要があります。 |
AllowLeadingWhite | 数字の前に空白ができました。 |
AllowTrailingWhite | デジタルリア空白を可能にします。 |
AllowLeadingSign | デジタル看板の前を許可されています。 |
AllowTrailingSign | 後方デジタル看板を許可します。 |
AllowParentheses | 括弧で囲まれた数字の組を可能に、ブラケットは負の数を表す文字列を解析することを示しています。 |
AllowDecimalPoint | 数値文字列は小数点を持つことができます。 |
AllowThousands | グループは、数値、文字列の区切り文字を含むことができます。 |
AllowExponent | 数値文字列は、指数表記を採用してもよいです。 |
AllowCurrencySymbol | 数値文字列は、通貨記号を含むことができます。 |
AllowHexSpecifier | 数値文字列進値が、前に「0X」または「&H」を追加することはできません。 |
以下は、メンバーの組み合わせです:
名前 | 説明 |
---|---|
整数 | AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign。 |
HexNumber | AllowLeadingWhite | AllowTrailingWhite | AllowHexSpecifier。 |
数 | AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign | AllowDecimalPoint | AllowThousands。 |
浮く | AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowDecimalPoint | AllowExponent。 |
通貨 | AllowExponentとAllowHexSpecifierのすべてのモードに加えて。 |
どれか | AllowHexSpecifierのすべてのモードに加えて。 |
これは、列挙型プロファイルのみ、詳細は参照[MSDN] NumberStylesです。
NumberStyles int.Parseのデフォルトは整数、整数のみ添加の前と後の空白と減算モードを持つことができ、とても入ってくる他のです。
short.Parse等のような他のdecimal.Parse、float.Parse、byte.Parseが、実際にはそれらは同じ変換のみクラスで処理されるため、NumberStylesの使用をサポートし、数値ValueTypeにあり、ちょうど使用NumberStylesは異なり、デフォルト値NumberStyles.Currency decimal.Parseを使用しました。
TryParseは同じ、形式だけでなく、間違っている値の戻りTryParseない解析プログラムが書き込まない場合のフォーマット不正な値が例外をスローしますですので、変換時にプログラムを閉じることがあり、より良い方法であるが、値は、そうでなければ、変数変換値を受信するTryParseで発生する可能性があるので、それは、必ずしもそうではない(災害の大きすぎることはありません、変換後の値が存在しますが、変換が失敗し、他をしませんでした、最後に、まだ生成することがNullReferenceExceptionは、このような問題を回避するには、防御的プログラミング(防御的プログラミング)の)の精神を参照することができます。
使用例
//含有千分位
int value1 = int.Parse("1,000,000", NumberStyles.AllowThousands);
int value2 = (int)decimal.Parse("1,000,000"); //当然用decimal.Parse也可以,只是要转型
//但有小数就不能用int.Parse会失败
int value3 = (int)decimal.Parse("1,000,000.50", NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint);
//有货币符号也可以,但$与数字不能分开,但使用电脑的文化设定
int value4 = int.Parse("NT$1,000,000", NumberStyles.AllowCurrencySymbol | NumberStyles.AllowThousands);
//也可以使用不同国家的文化设定
int value5 = int.Parse("$1,000,000", NumberStyles.Any, CultureInfo.GetCultureInfo("en")); //美国
int value6 = int.Parse("¥1,000,000", NumberStyles.Any, CultureInfo.GetCultureInfo("ja")); //日本
//指数
int value7 = int.Parse("1E+6", NumberStyles.AllowExponent);
//括弧
int value8 = int.Parse("(1,000,000)", NumberStyles.AllowParentheses | NumberStyles.AllowThousands);
//16进制
int value9 = int.Parse("F4240",NumberStyles.HexNumber);
//前后空白
int value10 = int.Parse(" 1000000 ",NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite);
//但百分值不支持,要额外处理
int str = "10.5%";
if (str.IndexOf('%')>-1)
{
int value11 = decimal.Parse(str.TrimEnd(new char[] {'%',' '})) / 100M;
}
//2或8进制,要使用另一个 Method
int value12 = Convert.ToInt32("11110100001001000000", 2);
int value13 = Convert.ToInt32("3641100", 8);
//如果懒惰可以这样写,只是性能会差一点点
int value14 = (int)decimal.Parse("1,000,000", NumberStyles.Any);
参考資料
[MSDN] NumberStyles列挙型
[ウィキペディア]守備プログラミング
オリジナル:大カラム [C#のデジタル値に変換する種々の迅速かつ容易なワード(INT文字列)