首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取特定的文化货币模式

如何获取特定的文化货币模式
EN

Stack Overflow用户
提问于 2011-08-03 17:07:34
回答 6查看 36.4K关注 0票数 24

如何获取特定区域性的货币模式?

例如:

而不是使用:

代码语言:javascript
复制
string.Format("{0:c}", 345.10)

我想使用这个:

代码语言:javascript
复制
string.Format("#.##0,00 €;-#.##0,00 €", 345.10);

但是如何获得应用程序需要的每个区域性的模式字符串(如"#.##0,00 string;-#.##0,00 each“)?

我不能使用"{0:c}“模式,因为如果用户切换语言,货币应该是相同的。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-08-03 17:42:24

CultureInfo包含一个NumberFormatInfo,该类描述(其中)如何格式化该特定区域性的货币。

特别是,您可以使用CurrencyPositivePatternCurrencyNegativePattern来确定货币符号是放在金额之前还是之后,当然还可以使用CurrencySymbol来获得正确的货币符号。当使用C格式说明符时,所有这些信息都由.NET使用。

你可以在MSDN上阅读更多关于NumberFormatInfo class的信息。

下面的代码演示了正确设置货币格式所需的一些步骤。它只使用CurrencySymbolCurrencyPositivePatternCurrencyDecimalDigits,因此是不完整的:

代码语言:javascript
复制
var amount = 123.45M;
var cultureInfo = CultureInfo.GetCultureInfo("da-DK");

var numberFormat = cultureInfo.NumberFormat;
String formattedAmount = null;
if (amount >= Decimal.Zero) {
  String pattern = null;
  switch (numberFormat.CurrencyPositivePattern) {
    case 0:
      pattern = "{0}{1:N" + numberFormat.CurrencyDecimalDigits + "}";
      break;
    case 1:
      pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "}{0}";
      break;
    case 2:
      pattern = "{0} {1:N" + numberFormat.CurrencyDecimalDigits + "}";
      break;
    case 3:
      pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "} {0}";
      break;
  }
  formattedAmount = String.Format(cultureInfo, pattern, numberFormat.CurrencySymbol, amount);
}
else {
  // ...
}

Console.WriteLine(formattedAmount);

当然,您可以简单地使用:

代码语言:javascript
复制
var amount = 123.45M;
var cultureInfo = CultureInfo.GetCultureInfo("da-DK");
var formattedAmount = String.Format(cultureInfo, "{0:C}", amount);
Console.WriteLine(formattedAmount);
票数 28
EN

Stack Overflow用户

发布于 2011-08-03 17:33:20

我认为您所问的是如何更改货币符号,但保留特定于文化的格式。可以通过获取当前NumberFormatInfo的副本并修改CurrencySymbol属性来完成此操作:

代码语言:javascript
复制
Thread.CurrentThread.CurrentCulture = new CultureInfo("de");
// pretend we are german

var nfi = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
nfi.CurrencySymbol = "$$$";
Console.WriteLine(string.Format(nfi,"{0:c}",345.10));

这将输出:

代码语言:javascript
复制
345,10 $$$

不更改它输出的CurrentCulture (对我来说):

代码语言:javascript
复制
$$$345.10
票数 15
EN

Stack Overflow用户

发布于 2014-01-16 05:50:40

适用于所有数字格式的快速而肮脏的方法是:

代码语言:javascript
复制
var culture = CultureInfo.GetCultureInfo("el-GR");
var numberFormat = (NumberFormatInfo)culture.NumberFormat.Clone();
numberFormat.CurrencySymbol = "€";  // Force the currency symbol regardless of culture
var specifier = "C";                // Or any other format specifier
var positivePattern = 1110.ToString(specifier, numberFormat).Replace('1', '#');
var negativePattern = (-1110).ToString(specifier, numberFormat).Replace('1', '#');
var pattern = positivePattern + ";" + negativePattern;

在本例中,pattern等于"#.##0,00 equals;-#.##0,00 equals“。这避免了试图找出所有排列的许多令人头疼的事情。我很感谢被问到的问题,因为它帮助了我,迫使我找到一个更容易的答案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6924067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档