[英]Why double.Parse(“0.05”) returns 5.0?
我正从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");
要解决此问题,您可以使用解析函数的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”。
这是因为文化背景。 请确保 ”。” 是您当前文化的分界符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.