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

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

 

我尝试通过以下方式将其转换为双倍:

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

而我获得5.0而不是0.05。

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

那是你的文化设置,测试相同,但用逗号代替点,你会看到那个工作

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

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

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

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

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

这段代码:

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

也打印5 ,所以问题出在您的文化设置中。

尝试

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

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

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