首页 文章

格式化带有四位数的十进制,除非这些数字为零

提问于
浏览
1

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

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

我将举几个例子来解释:

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

换句话说:我们想删除小数点后的所有必要的零,但要确保逗号后总是有两位数字 .

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

2 回答

  • 0

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

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

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

    Standard Numeric Format Strings: https://msdn.microsoft.com/en-us/library/0b22a4x2(v=vs.110).aspx

    Custom Numeric Format Strings: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings

  • 5

    那这个呢 ?

    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);
        }
    

相关问题