簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM