6

我正在从我的 App.config 中读取一个值;这是:

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

我尝试通过执行以下操作将其转换为双倍:

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

我得到 5.0 而不是 0.05。

你能建议吗?我做错了什么,我应该如何解析这个?

4

5 回答 5

9

那是针对您的文化设置的,测试相同,但用逗号代替点,您将看到该工作

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

要解决此问题,您可以使用解析函数的跟随重载

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 回答