我正从App.config中读取一个值;这是:
<add key="someValue" value="0.05"/>
我尝试将其转换为双倍:
var d = double.Parse(ConfigurationManager.AppSettings["someValue"]);
我获得5.0而不是0.05。
你能建议吗?我该怎么做错了,我该怎么解析呢?答案 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)
这是因为文化背景。请确保 ”。”是你当前文化的分界符。