繁体   English   中英

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

[英]Format decimal number with custom amount of digits after comma

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

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"自定义格式说明符

如果存在一个数字,则将零替换为相应的数字; 否则,结果字符串中将出现零。

例如;

decimal d = 12345;
Console.WriteLine(d.ToString("#.00")); // 12345.00

这是扩展功能的工作

    public static string FormatDecimal(this decimal value, int decimalSeparator = 2)
    {
        return  value.ToString(string.Format("0.{0}", new string('0', decimalSeparator)));
    }

您可能正在寻找格式化小数点的字符串表示形式的方法。 尝试这个:

decimal myNumber = 12345.67m;
string formattedNumber = myNumber.ToString("N3");
Console.WriteLine(formattedNumber); // Prints "12345.670"

请参阅此处以获取更多信息: https : //msdn.microsoft.com/zh-cn/library/dwhawy9k%28v=vs.110%29.aspx

从MSDN:

标准数字格式字符串用于格式化常用数字类型。 标准数字格式字符串的格式为Axx,其中:

A是称为格式说明符的单个字母字符。 任何包含多个字母字符(包括空格)的数字格式字符串都将解释为自定义数字格式字符串。 有关更多信息,请参见自定义数字格式字符串。

xx是称为精度说明符的可选整数。 精度说明符的范围是0到99,并且会影响结果中的位数。 请注意,精度说明符控制数字的字符串表示形式中的位数。 它不会舍入数字本身。 要执行舍入运算,请使用Math.Ceiling,Math.Floor或Math.Round方法。

当精度说明符控制结果字符串中的小数位数时,结果字符串将反映四舍五入为零的数字(即使用MidpointRounding.AwayFromZero)。

显示字符串时,应指定格式。

当您转换为字符串时,您需要执行以下操作:

String.Format("{0:0.00}", formatedNumber);

请参阅本文以获取更多详细信息:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM