我正在从我的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);
public static double Parse(string s, NumberStyles style, IFormatProvider provider)
。 - Security Houndvar 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”。
这是由于文化设置引起的。请确保“.”是您当前文化中的分隔符。
public static double Parse(string s, NumberStyles style, IFormatProvider provider)
。当您将一个string
变量设置为ConfigurationManager.AppSettings["someValue"]
时,具体会发生什么,似乎您并没有真正尝试调试您的代码。 - Security Hound