カルチャを無視するDecimal.TryParseを使用する必要がある(つまり、入力に小数点区切り文字として "。"または "、"が含まれているかどうかは気にしません)、10進数バリデーターにカスタム文字列を記述しています。これが推奨される方法です。
public static bool TryParse(
string s,
NumberStyles style,
IFormatProvider provider,
out decimal result
)
3番目のパラメーターとして何を使用するかわかりません。私が見た例は次のようになります。
culture = CultureInfo.CreateSpecificCulture("en-GB");
Decimal.TryParse(value, style, culture, out number)
彼らは特定の文化を創造します。 CultureInfoには「CreateInvariantCulture」メソッドがなく、CultureInfo.InvariantCultureは必要なタイプではありません。正しい使い方は何ですか?
このようにしてみてください:
decimal value;
bool b = Decimal.TryParse("0.1", NumberStyles.Any, new CultureInfo("en-US"), out value);
最善の方法は、Decimal.Parse()メソッドを使用することです。これは、従来の10進文字列値の場合と同じです。
NumberStyles.Currencyを使用して、値を通貨として読み込むように指定できます。これにより、通貨関連の値が処理されます(これを使用するには、System.Globalalizationへの参照を追加する必要があります。
using System.Globalization;
Decimal.Parseは3番目のパラメーターも受け入れます。これにより、特定のCultureを選択して希望する場合は、IFormatProvider
を明示的に設定できます。
decimal value = Decimal.Parse(currency, NumberStyles.Currency, CultureInfo.InvariantCulture); //yields 15.55
私の悪者。次のコードをテストしました。
string DutchDecimal = "1,5";
string EnglishDecimal = "1.5";
decimal a;
decimal b;
Console.WriteLine(decimal.TryParse(DutchDecimal, out a));
Console.WriteLine(a);
Console.WriteLine(decimal.TryParse(EnglishDecimal, out b));
Console.WriteLine(b);
Console.Read();
そして、両方の文字列を正しく解析します。デフォルトのTryParseは確かにカルチャ不変のようです。 EnterpriseLibraryのデフォルトのTypeConversionValidatorはカルチャ依存であり、TryParseを使用するだけであるため、これは事実ではないと想定しました。ただし、このデフォルトのパーサーは、現在のカルチャを使用するようにハードコードされています。
編集:私は「1.5」が1.5に変換し、「1,5」が15に変換することを発見しました。これは実際にカルチャ不変の動作に正しいので、そこにあります。この質問全体は、文化の不変条件がどのように機能するかについての私の誤解によって生じたようです。
実際には CultureInfo.InvariantCulture
はここで使用できます。このパラメーターは、IFormatProvider
が実装するインターフェースであるCultureInfo
を想定しています。ただし、InvariantCulture
は、ユーザーの設定によって変化しないという意味で不変です。
実際、次のいずれかを受け入れる文化はありません,
または.
小数点記号として–それらはすべてどちらかです。これらの小数点区切り記号のいずれかを使用できるデータを処理する他の方法を見つける必要があります。
3番目のパラメーターとして何を使用するかわかりません。
すべてのカルチャ NumberDecimalSeparator
または NumberGroupSeparator
などは同じではないためです。
誰かが.
はNumberDecimalSeparator
として、誰かが,
しかし、CultureInfo
として両方を使用するNumberDecimalSeparator
はありません。
CultureInfo
実装 IFormatProvider
インターフェイス。 CultureInfo
を指定すると、value
文字列がそのカルチャルールで解析されます。
カルチャを無視するDecimal.TryParseを使用する必要がある10進数バリデーターにカスタム文字列を書いています
そのような場合、 CultureInfo.Clone
method 必要なカルチャのコピー(または InvariantCulture
)で、NumberDecimalSeparatorとNumberGroupSeparatorに必要な文字列を設定できます。