格式化为双倍到固定宽度C#

时间:2015-08-24 14:57:52

标签: c# formatting format

我的要求如下:

我有一个双号。它可以是积极的也可以是消极的。我想使用String.Format()来格式化它。

输出数字(正数(无符号)/负数(包括符号)/零)应为固定宽度:11 所有数字都应该有2位小数。

示例:

1.2     00000001.20
.2      00000000.20
-.2     -0000000.20
12      00000012.00
0       00000000.00
-0      00000000.00
12.555  00000012.55

基本上,我想要的是固定宽度(11位数)。 2小数点。没有积极的迹象。负号包括固定宽度。

我尝试过:

{0:00000000.00;0:0000000.00;0:00000000.00}

请告诉我这样做的正确方法。

3 个答案:

答案 0 :(得分:0)

string.Format("{0:00000000.00}", 1.2) 

对我来说很好用

答案 1 :(得分:0)

您需要第二个格式部分来显示负数。如果您需要重用它,将其声明为Func或扩展方法可能会有所帮助。像这样:

using System;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<double, string> toFixedWidth = (d) => { 
                return string.Format("{0:00000000.00;-0000000.00}", d); 
            };

            foreach (var d in new double[] { 1.2, 0.2, -0.2, 12, 0, -0, 12.555 })
            {
                Console.WriteLine(toFixedWidth(d));
            }
        }
    }
}
00000001,20
00000000,20
-0000000,20
00000012,00
00000000,00
00000000,00
00000012,56
Press any key to continue . . .

答案 2 :(得分:0)

这是一个通用函数。它的工作方式与其他答案相同,但它根据 length(总长度)和 decimals 参数动态构建格式化字符串。

public static string FormatDoubleAsFixedLengthString(double value, int length, int decimals)
{
    int wholeDigits = length - decimals;

    // Provide a spot for the negative sign if present.
    if (value < 0)
    {
        wholeDigits--;
    }

    string wholeDigitsFormat = new String('0', wholeDigits);
    string decimalDigitsFormat = new String('0', decimals);
    string format = $"{{0:{wholeDigitsFormat}.{decimalDigitsFormat}}}";
    return string.Format(format, value);
}

虽然我们在这里,但这里有相同的功能,但对于整数

public static string FormatIntAsFixedLengthString(int value, int length)
{
    // Provide a spot for the negative sign if present.
    if (value < 0)
    {
        length--;
    }
    return string.Format($"{{0:D{length}}}", value);
}