私は適用し、特定のCultureInfo
に番号を正規化しようと苦労してるの小数を含む文字列そのNumberFormat
ノーマライズ特定CultureInfo.NumberFormat
のは、私もいくつかの文字を含む文字列があるとしましょう、そうIそれをクリーンアップする必要があります。
var cleanedInput = Regex.Replace(userInput, @"[^0-9-,'.]+", "");
だから私は基本的に,
'
と.
を保っています。 CultureInfo
に応じて、,
と.
は、小数点を区切ったり、数値をグループ化したりするために使い方が異なるため、私はこれを行っています。
は心の中で、私は小数とIFormatProvider
はdinamically CultureInfo.NumberFormat
所望の「ローカル」に適用されようとしている許可するNumberStyle
を指定して、Decimal.TryParse
方法を適用することを持ちます。
decimal numericData;
if (!decimal.TryParse(cleanedInput, NumberStyles.AllowDecimalPoint, LocaleUser.NumberFormat, out numericData))
throw new Exception($"Error occurred. Could not parse:{cleanedInput} ");
"hi9000,99hi"
と入力します。一度清掃されると、"9000,99"
となります。ニース。 それで、TryParse
を適用し、Decimal
9000.99
を返します。私が実際にes-ES
CultureInfo
を小数点区切り文字として,
に適用しているという重要なことです。私は基本的に9000,99
または9.000,99
を期待しています。
コードはException
を発行していませんが、指定したCultureInfo
が適用されていないようです。
私は正確に何が欠けていますか? Decimal.TryParse
は私がよく扱っているスイス軍ナイフだという気持ちがあります。
事前に感謝します。
私は問題が何であるかを正確にわからないんだけど、小数点形式を_have_ないことを覚えておいてください。値を表示するときに書式を指定します。デバッガで見ている場合は、マシンが設定されているすべてのカルチャを使用します。値を特定の形式で表示するには、 'decimal.ToString'または' string.Format'を使用します。 –
明確にするために、あなたが提供するコードは例外を発生させていますか?そして、 'cleanedInput'はあなたがパーサに入る前に期待しているものですか? –
皆様にお返事ありがとうございます。コードは例外を発生させませんが、私が得ている出力は、私が指定したCultureInfoと、それがデバッグされている場所のVS2015を使用しているCultureInfoを適用していません。 – Gonzo345