用四位数字格式化小数,除非这些数字为零

时间:2018-06-26 11:56:08

标签: c# .net string-formatting number-formatting

我们有一个特定的格式问题,我们希望以最有效的方式解决。

在没有小数点的情况下,我们必须将小数点格式设置为小数点后的四位数,因为在这种情况下,小数点应设置为小数点后的两位数

我将举几个例子来解释:

1.234应打印为1.234(所有数字) 而 1.000应打印为1.00(限制为两位数) 和 1.500应打印为1.50(限制为两位数)

换句话说:我们要删除小数点后的所有不必要的零,但请确保在逗号后始终剩余两位。

我猜没有简单的方法来完成.NET中已经提供的方法吗?如果是这样,我想我可以使用.ToString()函数将其转换为字符串并解析小数点后的所有内容吗?还是有人有更有效的想法?

2 个答案:

答案 0 :(得分:5)

使用以下格式说明符调用decimal.ToString()方法应为您提供2到4位小数的输出:

decimal d = 1.234m;
string output = d.ToString("0.00##");

有关数字格式说明符的更多信息,请参考MSDN。

标准数字格式字符串: https://msdn.microsoft.com/en-us/library/0b22a4x2(v=vs.110).aspx

自定义数字格式字符串: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings

答案 1 :(得分:0)

那呢?

    string SetDecimals(decimal val)
    {
        var decimalStr = val.ToString().Split(new string[] { System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator }, StringSplitOptions.None)[1];
        if (decimalStr.Length == 4 && !decimalStr.EndsWith("00"))
            return string.Format("{0:N4}", val);
        else if(decimalStr.Length == 3 && !decimalStr.EndsWith("0"))
            return string.Format("{0:N3}", val);
        else
            return string.Format("{0:N2}", val);
    }