[英]Double.Parse - Internationalization problem
這真讓我抓狂。 我在ASP.NET 2.0 WebForm頁面中有以下字符串
string s = "0.009";
很簡單。 現在,如果我的文化是西班牙語 - 這是“es-ES” - 我嘗試將字符串轉換為Double,我會執行以下操作:
double d = Double.Parse(s, new CultureInfo("es-ES"));
我期待的是0,009。 相反,我得到9.我明白.NET認為它是千分隔符,在en-US中是一個逗號,但不應該把我傳遞給parse方法的文化信息並應用正確的格式轉換?
如果我做
double d = 0.009D;
string formatted = d.ToString(new CultureInfo("es-ES"));
格式化現在是0,009。 任何人?
它正在采用您提供的文化並應用正確的格式。 你提供了一串“0.009”,並告訴它它是西班牙語...然后你抱怨說它正確地解釋為西班牙語! 當你知道它不是時,不要告訴它字符串是西班牙語。
您應該將Pars方法傳遞給正在解析的字符串的文化,在這種情況下,它將是en-US或en-Gb或InvariantCulture。
傑斯的寫作對我有用。 只為那些需要嘗試如何獲得“不變文化”的人:看起來如此
double d = Double.Parse(myString, CultureInfo.InvariantCulture);
(第一個stackoverflow帖子,所以是的,相當邊緣;)
你倒退了。
當你說double d = Double.Parse(s, new CultureInfo("es-ES"));
,您要求.NET將您的字符串解析為double,假設該字符串是在es-ES文化中編寫的。
在西班牙文化中,“。” 是一個千位分隔符,所以“0.009”是9。
當你使用ToString()轉換時,最后,它說使用西班牙文化將0.009轉換為字符串,因此它使用“,”作為小數點分隔符,並得到“0,009”。 行為是正確的。
我的猜測是你想使用Double.Parse和Invariant Culture,以及ToString和西班牙文化,所以0.009變成0,009。
我認為你正在以錯誤的方式解釋它,在es-ES文化中,實際上只有很長的路要說9,就像“。” 不是小數分隔符,所以如果你要求使用es-ES文化解析字符串“0.009”,你應該得到deouble 9.0。 如果你要求它解析“0,009”你應該得到0.009的兩倍。
同樣,如果你要求它格式化雙重0.009,你應該在es-ES中得到字符串“0,009”。
你錯誤地解析和格式化。 第一次得到9而不是.009因為你在一個基於。的文化中形成了一個字符串,並使用一個基於文化的文化來解析它。 您需要使用它創建的任何文化來解析它,然后使用您想要顯示的任何文化格式化它。
double d = Double.Parse("0,009",
NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
CultureInfo.CreateSpecificCulture("es-ES"));
在es-ES文化中,“,”是十進制分配器(不是“。”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.