使用逗号后的自定义数字格式化十进制数字

时间:2015-04-19 12:12:18

标签: c# decimal

我有这个自定义扩展名,应该用逗号后的自定义数字位数格式化十进制数字。

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

我做错了什么?

4 个答案:

答案 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