简体   繁体   English

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

[英]Why double.Parse(“0.05”) returns 5.0?

I am reading a value from my App.config; 我正从App.config中读取一个值; which is: 这是:

 <add key="someValue" value="0.05"/>

And I try to convert it to double by doing: 我尝试通过以下方式将其转换为双倍:

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

And I obtain 5.0 insteads of 0.05. 而我获得5.0而不是0.05。

Can you advice? 你能建议吗? What do I do wrong and how should I parse this? 我该怎么做错了,我应该如何解析这个?

That's for your culture settings, Test the same but with a comma instead a point and you will see that work's 那是你的文化设置,测试相同,但用逗号代替点,你会看到那个工作

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

To fixed this problem you could used the follow overload of the parse function 要解决此问题,您可以使用解析函数的follow重载

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

Maybe the problem is in the culture settings. 也许问题出在文化环境中。 There could be many issues with them, such as comma as digital separator. 它们可能存在许多问题,例如逗号作为数字分隔符。 When you're working with non-cultured values, such as config files, you should explicitly specify that you need InvariantCulture. 当您使用非文化值(例如配置文件)时,应明确指定您需要InvariantCulture。 Try 尝试

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

This code: 这段代码:

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

prints 5 as well, so the problem is in your culture settings. 打印5 ,所以问题出在您的文化设置中。

Try 尝试

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

Always pass your culture info when using double.Parse. 使用double.Parse时始终传递您的文化信息。 Here in Belgium, it's "0,05". 在比利时,这是“0,05”。

It's because of culture settings. 这是因为文化背景。 Please ensure "." 请确保 ”。” is a delimiter in your current culture. 是您当前文化的分界符。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM