2

Visual Studio 2010 を使用しています。コードの動作がおかしい

このコードを使用すると、xml ファイルを解析できます。

XDocument document = XDocument.Load("http://www.studiovincent.net/list.xml");
XElement resourcesElement = document.Root.Element("resources");
XElement resourceElementVincent = (from resourceElement in resourcesElement.Elements("resource")
                                           where resourceElement.Elements("field").Single(fieldElement => fieldElement.Attribute("name").Value == "name").Value == "Vincent"
                                           select resourceElement).Single();

decimal tasso = Math.Round(decimal.Parse(resourceElementVincent.Elements("field").Single(fieldElement => fieldElement.Attribute("name").Value == "age").Value) / Convert.ToInt64(1.00E+006), 6);


string gigi = Math.Round(41 * tasso, 4).ToString();
Console.WriteLine("{0}", gigi);
Console.ReadLine();

地域オプションを変更するまで、すべて正常に動作します。イタリア語を選択した場合:

ここに画像の説明を入力

これは出力です: 0,0013

ここに画像の説明を入力

地域オプションで米国を選択した場合、これは OUTPUT: 0.0000です。

ここに画像の説明を入力

この問題を解決する方法がわかりません。

前もって感謝します。

4

3 に答える 3

3

decimal.Parse(string)現在のシステム形式を使用します。したがって

decimal.Parse(resourceElementVincent.Elements("field")
       .Single(fieldElement => fieldElement.Attribute("name").Value == "age")
       .Value)

Vincent の年齢が 0.27 に設定され、現在のカルチャがイタリア語 ( NumberDecimalSeparatorがコンマ) の場合、0 が返されます。

ただし、decimal.Parse(string, IFormatProvider)代わりにメソッドを使用して、InvariantCulture(NumberDecimalSeparator がピリオドである)を渡すことができます。

decimal.Parse(resourceElementVincent.Elements("field")
       .Single(fieldElement => fieldElement.Attribute("name").Value == "age")
       .Value, CultureInfo.InvariantCulture);

MSDN のドキュメントはこちらです。

于 2013-01-24T21:57:07.960 に答える
1

私の推測では、1.00E+006の解析は現在の領域に依存していると思います。

于 2013-01-24T21:42:27.403 に答える
-1

これは正常です!ヨーロッパの言語では小数点をコンマとして使用し、その逆も同様です。どちらか一方を一貫して使用する場合は、次に示すように、String.Format と組み合わせて特定のカルチャを設定できます。

CultureInfo によるフォーマット文字列

于 2013-01-24T21:28:13.353 に答える