2013-02-08 55 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