为什么double.Parse(“0.05”)返回5.0?

时间:2012-07-12 15:31:18

标签: c# .net parsing double

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

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

我尝试将其转换为双倍:

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

我获得5.0而不是0.05。

你能建议吗?我该怎么做错了,我该怎么解析呢?

5 个答案:

答案 0 :(得分:9)

这适用于您的文化设置,测试相同,但使用逗号代替点,您将看到该作品的

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

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

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

答案 1 :(得分:7)

可能问题出在文化设置中。它们可能存在许多问题,例如逗号作为数字分隔符。当您使用非文化值(例如配置文件)时,应明确指定您需要InvariantCulture。试试

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

答案 2 :(得分:5)

此代码:

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

也会打印5,因此问题出在您的文化设置中。

尝试

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

答案 3 :(得分:0)

使用double.Parse时始终传递您的文化信息。在比利时,这是“0,05”。

答案 4 :(得分:-1)

这是因为文化背景。请确保 ”。”是你当前文化的分界符。