使用快速测试C#的货币格式似乎不支持可选的小数位。
CultureInfo ci = new CultureInfo("en-US");
String.Format(ci, "{0:C2}", number); // Always 2 decimals
String.Format(ci, "{0:C6}", number); // Always 6 decimals
尝试自定义它不起作用。
String.Format(ci, "{0:C0.00####}", number); // two decimals always, 4 optional
是否可以使用带有可选小数位数的货币格式?
e.g。 $ 199.99或$ 0.009999或$ 5.00就像这样显示。
答案 0 :(得分:1)
我不确定使用C
是否有直接方法可以做到这一点,但您可以这样做:
decimal number = 1M;
CultureInfo ci = new CultureInfo("en-US");
string formattedValue = string.Format("{0}{1}",
ci.NumberFormat.CurrencySymbol,
number.ToString("0.00####"));
答案 1 :(得分:1)
这有点啰嗦,但你可以先计算小数位数。然后,您可以使用该数字来形成格式字符串。
你需要这个实用功能(以Joe的名义去找一个人):
private int CountDecimalPlaces(decimal value)
{
value = decimal.Parse(value.ToString().TrimEnd('0'));
return BitConverter.GetBytes(decimal.GetBits(value)[3])[2];
}
然后你可以沿着这些方向做点什么:
decimal number = 5.0M;
CultureInfo ci = CultureInfo.CurrentCulture;
NumberFormatInfo nfi = ci.NumberFormat.Clone() as NumberFormatInfo;
// Count the decimal places, but default to at least 2 decimals
nfi.CurrencyDecimalDigits = Math.Max(2 , CountDecimalPlaces(number));
// Apply the format string with the specified number format info
string displayString = string.Format(nfi, "{0:c}", number);
// Ta-da
Console.WriteLine(displayString);