6

App.config から値を読み取っています。つまり:

 <add key="someValue" value="0.05"/>

そして、次のようにして double に変換しようとします。

 var d = double.Parse(ConfigurationManager.AppSettings["someValue"]);

そして、0.05 ではなく 5.0 を取得します。

アドバイスいただけますか?私は何を間違っており、これをどのように解析する必要がありますか?

4

5 に答える 5

9

それはあなたのカルチャ設定です。同じことをテストしますが、ポイントの代わりにコンマを使用すると、その作業が表示されます

var d = double.Parse("0,05");

この問題を修正するには、parse 関数の follow オーバーロードを使用できます。

var d = double.Parse(ConfigurationManager.AppSettings["someValue"], CultureInfo.InvariantCulture);
于 2012-07-12T15:33:46.123 に答える
7

問題は文化設定にあるのかもしれません。デジタルセパレータとしてのカンマなど、多くの問題が発生する可能性があります。構成ファイルなど、カルチャ化されていない値を使用している場合は、InvariantCulture が必要であることを明示的に指定する必要があります。試す

var d = double.Parse(ConfigurationManager.AppSettings["someValue"],
                     CultureInfo.InvariantCulture);
于 2012-07-12T15:34:04.797 に答える
5

このコード:

var nfi = new NumberFormatInfo {
    NumberGroupSeparator = ".",
    NumberDecimalSeparator = ","
};
Console.WriteLine(double.Parse("0.05", nfi));

印刷5も行われるため、問題はカルチャ設定にあります。

試す

var d = double.Parse(
    ConfigurationManager.AppSettings["someValue"], 
    CultureInfo.InvariantCulture);
于 2012-07-12T15:37:33.597 に答える
0

double.Parse を使用するときは、常にカルチャ情報を渡します。ここベルギーでは「0,05」です。

于 2012-07-12T15:33:58.297 に答える
-1

それは文化設定のせいです。確認してください "。" 現在のカルチャの区切り文字です。

于 2012-07-12T15:38:36.623 に答える