我有这个自定义扩展名,应该用逗号后的自定义数字位数格式化十进制数字。
public static decimal FormatDecimal(this decimal value, int decimalSeparator = 2)
{
decimal returnValue = Math.Round(value, decimalSeparator, MidpointRounding.AwayFromZero);
return returnValue;
}
问题在于没有按预期工作。
如果我喜欢这样:
decimal number = 12345;
然后:
decimal formatedNumber = number.FormatDecimal(2);
结果应该是:
12345.00
而是结果是:
12345
我做错了什么?
答案 0 :(得分:1)
我认为正确的方法是使用The "0"
custom format specifier;
如果存在,则用相应的数字替换零; 否则,结果字符串中会出现零。
例如;
decimal d = 12345;
Console.WriteLine(d.ToString("#.00")); // 12345.00
答案 1 :(得分:1)
这里有扩展功能
public static string FormatDecimal(this decimal value, int decimalSeparator = 2)
{
return value.ToString(string.Format("0.{0}", new string('0', decimalSeparator)));
}
答案 2 :(得分:0)
您可能希望格式化小数的字符串表示形式。试试这个:
decimal myNumber = 12345.67m;
string formattedNumber = myNumber.ToString("N3");
Console.WriteLine(formattedNumber); // Prints "12345.670"
有关详细信息,请参阅此处:https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
来自MSDN:
标准数字格式字符串用于格式化常见数字类型。标准数字格式字符串采用Axx形式,其中:
A是一个称为格式说明符的单个字母字符。包含多个字母字符(包括空格)的任何数字格式字符串都将被解释为自定义数字格式字符串。有关更多信息,请参阅自定义数字格式字符串。
xx是一个可选的整数,称为精度说明符。精度说明符的范围是0到99,它会影响结果中的位数。请注意,精度说明符控制数字的字符串表示形式中的位数。它不会对数字本身进行舍入。要执行舍入操作,请使用Math.Ceiling,Math.Floor或Math.Round方法。
当精度说明符控制结果字符串中的小数位数时,结果字符串会反映从零开始舍入的数字(即使用MidpointRounding.AwayFromZero)。
答案 3 :(得分:0)
您应该在显示字符串时指定格式。
当您转换为字符串时,您需要执行以下操作:
String.Format("{0:0.00}", formatedNumber);
有关详细信息,请参阅This article: