Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串转换为货币与全球化问题_C#_String_Globalization - Fatal编程技术网

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

换句话说,这个表达式将成功解析:
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
ł
之间的区别。微软应该在他们的控制台上使用更好的字体。我遇到了完全相同的问题,并更新了我答案中的符号以包含。令人恼火!