2

カルチャに依存する数値書式の解析/検証で、C# (および Java) で問題が発生しました。数字のグループ化に関しては、セパレーターは .NET のどこにでも配置できるようです。数字のグループ化の使用を厳密に遵守する方法はありますか? たとえば、次を参照してください。

Decimal.Parse("9,0"); /// Returns 90, which is wrong
Decimal.Parse("90,00"); /// Returns 9000, which is wrong
Decimal.Parse("9,000"); /// Returns 9000, which is right

複雑なことに、文化によってグループごとの桁数が異なります。

助言がありますか?

編集: CultureInfo を Parse() に追加することが提案されましたが、それでも正しく機能しません。例えば:

CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); /// Murican English
Double.Parse("9,0", culture); /// Returns 90 when it should throw an exception

culture = CultureInfo.CreateSpecificCulture("pt-BR"); /// Brazillian Portuguese
Double.Parse("9.0", culture); /// Returns 90 when it should throw an exception
4

3 に答える 3

0

解析結果はカルチャに依存するため、CultureInfo指定する必要があります。

  // English, United States: 
  // "," is a thousand but not decimal separator, decimal separator is "." 
  // d1 = 90 since "," is NOT a decimal separator
  Decimal d1 = Decimal.Parse("9,0", new CultureInfo("en-US")); // <- 90 

  // Russian, Russia:
  // "," is a decimal separator
  // d2 = 9.0 since "," is a decimal separator
  Decimal d2 = Decimal.Parse("9,0", new CultureInfo("ru-RU")); // <- 9.0
于 2013-07-23T13:59:20.527 に答える
0

リンクの例に示されているように、使用方法としてここで解析に関する情報を見つけることができますCultureInfo culture

例えば

culture = CultureInfo.CreateSpecificCulture("en-US");
number = Double.Parse(value, culture);// 1,304.16 --> 1304.16 

しかし、「en-US」は「1 304,16」を解析できません。"fr-FR" はできます --> 1304.16 が得られます

于 2013-07-23T13:53:53.207 に答える