2013-02-08 38 views
1

我有這樣的:將字符串轉換貨幣和全球化問題

var pl = new CultureInfo("pl-PL"); 
decimal valsue = decimal.Parse("2,25 PLN", pl); 

,如果我不把「PLN」到我的字符串它工作正常。但PLN在我的國家是貨幣,我認爲它應該解析,所以也許我做錯了什麼?有沒有任何選項將這個解析成十進制,並在字符串中附加「PLN」?

+0

如果沒有它,它爲什麼你需要把它作爲字符串的一部分? – Khan 2013-02-08 20:00:36

+0

只是好奇,也會救我不必要的'string.replace(「PLN」,「」)''。 – ojek 2013-02-08 20:03:41

+0

This works:'decimal.Parse(「2,25zł」,NumberStyles.Currency,pl)' – 2013-02-08 20:45:03

回答

3

如果你看看你的CultureInfoNumberFormat對象,這將產生一些關於它如何解析值的線索。特別是,「pl-PL」文化的NumberFormat.CurrencySymbol

換句話說,這種表達會成功解析:如果你喜歡使用PLN作爲貨幣符號decimal.Parse("2,25 zł", pl);

(在技術上,它的貨幣代碼),可以配置自定義NumberFormat,像所以:

var pln = (NumberFormatInfo) pl.NumberFormat.Clone(); // Clone is needed to create a copy whose properties can be set. 
pln.CurrencySymbol = "PLN"; 
decimal valsue = decimal.Parse("2,25 PLN", NumberStyles.Currency, pln); 

但需要注意的NumberStyles.Currency在解析調用的使用:在默認情況下,decimal.Parse只接受包含數字值的字符串,沒有貨幣格式。

+1

請注意,在原始的'pl'文化中,符號爲「zł」',小寫的L與行程,而不僅僅是「zl」。我發現,因爲我無法用'「zl」'解析工作。這很令人困惑,因爲在我的控制檯應用程序窗口和PowerShell窗口中有一些蹩腳的微軟字體,就像'l'和'ł'之間的區別。微軟應該在他們的控制檯中使用更好的字體。 – 2013-02-08 20:40:44

+0

我有*完全相同的問題,並在我的答案中更新了符號以包含[正確的Unicode字符](http://www.fileformat.info/info/unicode/char/142/index.htm)。可氣! – 2013-02-08 20:45:15