我有這樣的:將字符串轉換貨幣和全球化問題
var pl = new CultureInfo("pl-PL");
decimal valsue = decimal.Parse("2,25 PLN", pl);
,如果我不把「PLN」到我的字符串它工作正常。但PLN在我的國家是貨幣,我認爲它應該解析,所以也許我做錯了什麼?有沒有任何選項將這個解析成十進制,並在字符串中附加「PLN」?
我有這樣的:將字符串轉換貨幣和全球化問題
var pl = new CultureInfo("pl-PL");
decimal valsue = decimal.Parse("2,25 PLN", pl);
,如果我不把「PLN」到我的字符串它工作正常。但PLN在我的國家是貨幣,我認爲它應該解析,所以也許我做錯了什麼?有沒有任何選項將這個解析成十進制,並在字符串中附加「PLN」?
如果你看看你的CultureInfo
的NumberFormat
對象,這將產生一些關於它如何解析值的線索。特別是,「pl-PL」文化的NumberFormat.CurrencySymbol
是zł
。
換句話說,這種表達會成功解析:如果你喜歡使用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
只接受包含數字值的字符串,沒有貨幣格式。
請注意,在原始的'pl'文化中,符號爲「zł」',小寫的L與行程,而不僅僅是「zl」。我發現,因爲我無法用'「zl」'解析工作。這很令人困惑,因爲在我的控制檯應用程序窗口和PowerShell窗口中有一些蹩腳的微軟字體,就像'l'和'ł'之間的區別。微軟應該在他們的控制檯中使用更好的字體。 – 2013-02-08 20:40:44
我有*完全相同的問題,並在我的答案中更新了符號以包含[正確的Unicode字符](http://www.fileformat.info/info/unicode/char/142/index.htm)。可氣! – 2013-02-08 20:45:15
如果沒有它,它爲什麼你需要把它作爲字符串的一部分? – Khan 2013-02-08 20:00:36
只是好奇,也會救我不必要的'string.replace(「PLN」,「」)''。 – ojek 2013-02-08 20:03:41
This works:'decimal.Parse(「2,25zł」,NumberStyles.Currency,pl)' – 2013-02-08 20:45:03