在货币显示中删除'$'之前的'US'

时间:2014-11-12 16:33:29

标签: c# asp.net currency-formatting

我正在使用.ToString("C")方法以货币格式显示十进制数字。但结果看起来 “US $ 5,365.20” 而不是 “$ 5,365.20” 。我尝试使用.ToString("C", new CultureInfo("en-US")),结果相同。但是当我尝试使用另一种文化(例如en-GB)时,一切都还可以(£1,234.56 )。

那么,为什么“美国”出现在“$”符号之前呢?我该如何删除它?

UPD 对不起。刚刚检查了一遍,我看到,new CultureInfo("en-US"))完全正常,我看了另一个标签:)但是现在我看到了(感谢@Mike McCaughan),当前的货币符号是“US $”。目前的文化名称是“en-US”。

3 个答案:

答案 0 :(得分:6)

" US"出现在" $"之前因为有人使用“控制面板”中的“区域”小程序自定义货币符号。要获取默认货币符号,请使用CultureInfo.GetCultureInfo代替constructor

decimal amount = 5365.20M;
Console.WriteLine(amount.ToString("C"));                                      // US$5,365.20
Console.WriteLine(amount.ToString("C", new CultureInfo("en-US")));            // US$5,365.20
Console.WriteLine(amount.ToString("C", CultureInfo.GetCultureInfo("en-US"))); // $5,365.20

MSDN Library文档解释了其中的差异。对于构造函数:

  

用户可以选择通过“控制面板”的区域和语言选项部分覆盖与当前Windows文化相关联的某些值。 ...如果与 name 关联的区域性标识符与当前Windows区域性的区域性标识符匹配,则此构造函数将创建一个使用这些覆盖的CultureInfo对象...

对于GetCultureInfo:

  

如果 name 是当前区域性的名称,则返回的CultureInfo对象不会反映任何用户覆盖。这使得该方法适用于在系统上没有真实用户帐户且需要有效加载多种文化的服务器应用程序或工具。

更新:如果.ToString("C", new CultureInfo("en-US"))有效但.ToString("C")没有,那么问题可能是其他一些代码为您的线程分配了一个自定义的CultureInfo&#34 ;美国$"作为货币符号。

答案 1 :(得分:2)

测试Mike McCaughan提供的内容我认为它会删除US,但它也会将$$添加到现有货币中。我已经对此进行了测试,这将有效,但我认为有更好的方法可以做到这一点,但这会产生以下结果

删除US最初将在一行中解决此问题。

var currency = "US$5,365.20".Replace("US", string.Empty);

或替代

考虑B.K建议,您可以将此更多级别从3行提升到2行

var currency = 5365.20M;
var finalCurrency = currency.ToString("C", new CultureInfo("en-US")).Replace("US", string.Empty);

答案 2 :(得分:1)

您可以更改特定文化的浅层克隆的货币符号:

var d = 2353.23M;
var currencyFormat = (NumberFormatInfo)CultureInfo.GetCultureInfo("en-US").NumberFormat.Clone();
currencyFormat.CurrencySymbol = "$"; // Change to something like %^# to test it
var currency = d.ToString("C", currencyFormat);