使用正确的小数位数格式化小数以更正货币(C#)

时间:2014-05-13 11:31:43

标签: c# internationalization culture currency-formatting

有一个十进制变量'价格'和RegionInfo变量' region'像这样:

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);

2 个答案:

答案 0 :(得分: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)
*/

答案 1 :(得分: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);