1

有一个十进制变量“价格”和一个 RegionInfo 变量“区域”,如下所示:

var price = new Decimal(49.9);
var region = new RegionInfo(Thread.CurrentThread.CurrentUICulture.LCID);

我喜欢这样:

string.Format("{0:0,0.##} {1}", price, region.CurrencySymbol);

这将为我希望支持的三种文化中的两种(瑞典语和挪威语)返回所需的价格字符串。尽管对于第三种文化(丹麦语),它会错误地将货币符号放在金额之后。

这是另一种方法:

string.Format("{0:c}", price);

这适用于所有三种文化,但现在我的问题是我无法控制十进制值的数量。

我的问题是:如何同时控制十进制值的数量和货币文化?

我正在寻找这样的东西(当然不起作用):

string.Format("{0:c,0.##}", price);
4

2 回答 2

1

您应该使用区域性的 NumberFormat 属性,因为它已经包含有关应包含多少小数的信息,但是如果您设置它的 CurrencyDecimalDigits 属性,则可以覆盖它。

来自MSDN的示例:

class NumberFormatInfoSample {

  public static void Main() {

  // Gets a NumberFormatInfo associated with the en-US culture.
  NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;

  // Displays a negative value with the default number of decimal digits (2).
  Int64 myInt = -1234;
  Console.WriteLine( myInt.ToString( "C", nfi ) );

  // Displays the same value with four decimal digits.
  nfi.CurrencyDecimalDigits = 4;
  Console.WriteLine( myInt.ToString( "C", nfi ) );

  }
}

/* 
This code produces the following output.

($1,234.00)
($1,234.0000)
*/
于 2014-05-13T11:42:17.953 回答
1

如果我理解正确,这不是你想要的吗?

var price = new Decimal(49.9);
var cultureInfo = new CultureInfo("da-DK");
//var currentCultureInfo = new CultureInfo(CultureInfo.CurrentCulture.Name);    

var test = string.Format(cultureInfo, "{0:C2}", price);
于 2014-05-13T11:48:03.547 回答