我正在从我的 App.config 中读取一个值;这是:
<add key="someValue" value="0.05"/>
我尝试通过执行以下操作将其转换为双倍:
var d = double.Parse(ConfigurationManager.AppSettings["someValue"]);
我得到 5.0 而不是 0.05。
你能建议吗?我做错了什么,我应该如何解析这个?
那是针对您的文化设置的,测试相同,但用逗号代替点,您将看到该工作
var d = double.Parse("0,05");
要解决此问题,您可以使用解析函数的跟随重载
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”。
这是因为文化背景。请确保 ”。” 是您当前文化中的分隔符。