簡體   English   中英

Double.Parse - 國際化問題

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

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