C# 将字符串转换为货币与全球化问题
我有这个:C# 将字符串转换为货币与全球化问题,c#,string,globalization,C#,String,Globalization,我有这个: var pl = new CultureInfo("pl-PL"); decimal valsue = decimal.Parse("2,25 PLN", pl); 如果我不把“PLN”放在我的字符串中,它可以正常工作。但印尼国家电力公司是我国的货币,我认为它应该被解析,所以也许我做错了什么?是否有任何选项将其解析为十进制,并将“PLN”附加到字符串中?如果您查看CultureInfo的对象,这将提供一些有关它打算如何解析值的线索。特别是,“pl pl”文化的NumberForma
var pl = new CultureInfo("pl-PL");
decimal valsue = decimal.Parse("2,25 PLN", pl);
如果我不把“PLN”放在我的字符串中,它可以正常工作。但印尼国家电力公司是我国的货币,我认为它应该被解析,所以也许我做错了什么?是否有任何选项将其解析为十进制,并将“PLN”附加到字符串中?如果您查看
CultureInfo
的对象,这将提供一些有关它打算如何解析值的线索。特别是,“pl pl”文化的NumberFormat.CurrencySymbol
是zł
换句话说,这个表达式将成功解析:decimal.parse(“2,25 zł”,pl)代码>
如果您喜欢使用PLN作为货币符号(从技术上讲,它是货币代码),可以配置自定义的NumberFormat
,如下所示:
var pln=(NumberFormatInfo)pl.NumberFormat.Clone();//需要克隆来创建可设置其属性的副本。
pln.CurrencySymbol=“pln”;
decimal valsue=decimal.Parse(“2,25兹罗提”,NumberStyles.Currency,兹罗提);
但是请注意在解析调用中的用法:默认情况下,decimal.Parse
只接受包含数值的字符串,而不接受货币格式。如果没有它,为什么需要将其作为字符串的一部分?只是好奇一下,它也会为我节省不必要的string.replace(“PLN”,“”)
。这项工作:decimal.Parse(“2,25 zł”,NumberStyles.Currency,pl)
注意,在原始的pl
文化中,符号是“zł”
,带有带笔划的小写L,而不仅仅是“zl”
。我发现了,因为我无法使用“zl”
进行解析。这很令人困惑,因为在一些蹩脚的Microsoft字体中,比如我在控制台应用程序窗口和PowerShell窗口中使用的字体,你无法区分l
和ł
之间的区别。微软应该在他们的控制台上使用更好的字体。我遇到了完全相同的问题,并更新了我答案中的符号以包含。令人恼火!