为什么C#十进制ToString不要求文化和货币?

时间:2018-12-13 11:31:24

标签: c# currency cultureinfo culture

在给定数字和货币的情况下,我找不到将其打印到具有特定文化的字符串中的选项。我找到的最接近的东西是npm install --save-dev nightwatch@0.9.x,但这不会要求使用货币,并且会假设我在谈论文化所了解的货币。如果我在欧洲使用美元怎么办?

例如,Javascript在构建字符串时将同时请求两个参数:

decimal.ToString("C", GIVEN_CULTURE)

这很相关,因为我正在使用的软件可以处理USD和MXN(墨西哥比索)。我们的网络信息中心显示了与文化有关的不同符号(Chrome浏览器示例,我认为跨浏览器会有所不同):

en:

  • USD的符号为“ $”
  • MXN的符号为“ MX $”

es-MX:

  • USD的符号为“ US $”
  • MXN的符号为“ $”

2 个答案:

答案 0 :(得分:3)

如果您担心的只是货币符号,则可以轻松将其设置为所需的任何符号:

var format = (NumberFormatInfo)CultureInfo.CreateSpecificCulture("es-MX").NumberFormat.Clone();
format.CurrencySymbol = "US$";
decimal amount = 12.34m;
amount.ToString("C", format);
// OUTPUT:
// US$12.34

但是通常格式化货币值还有更多。如您所见,例如,由于特定的文化差异(例如小数点,货币符号位置,间距等),该值在德国的格式非常不同:

amount.ToString("C", CultureInfo.CreateSpecificCulture("de-DE"));
// OUTPUT:
// 12,34 €

答案 1 :(得分:0)

我不确定我是否理解您的问题,但是例如,如果您想将double表示为不同国家的货币,那么您需要为其提供不同的CultureInfo

double foo = 3;
string fooGerman = foo.ToString("C", CultureInfo.GetCultureInfo("de-DE"));
string fooEnglish = foo.ToString("C", CultureInfo.GetCultureInfo("en-GB"));
Console.WriteLine(fooGerman);
Console.WriteLine(fooEnglish);

OUTPUT
3,00 €
£3.00

如果这还不够,您可以在CultureInfo中为给定的CultureInfo.NumberFormat.CurrencySymbol设置符号,然后可以为IFormatProvider创建自己的ToString()或创建自己的{ {1}}。