C#双精度格式化对齐小数点

7

我将数字按照不同小数位数对齐,以使小数点对齐在一条直线上。这可以通过填充空格来实现,但我遇到了问题。

假设我想要对齐以下数字:

0 0.0002 0.531 2.42 12.5 123.0 123172

这是我想要的结果:

     0
     0.0002
     0.531
     2.42
    12.5
   123.0
123172
4个回答

6
如果您希望得到精确的结果,就不能使用任何数字数据格式,因为这样不会将123格式化为123.0。您必须将值视为字符串以保留尾随零。
这将为您提供您所要求的确切结果:
string[] numbers = { "0", "0.0002", "0.531", "2.42", "12.5", "123.0", "123172" };

foreach (string number in numbers) 
{
    int pos = number.IndexOf('.');
    if (pos == -1) 
        pos = number.Length;
    Console.WriteLine(new String(' ', 6 - pos) + number);
}

输出:

     0
     0.0002
     0.531
     2.42
    12.5
   123.0
123172

这可以通过尊重特定于文化的小数分隔符来改进。 - ClickRick
@ClickRick:是的,但是你需要指定用于生成字符串的文化。这些字符串在代码中任何地方都不被视为数字。 - Guffa

1

通用示例

string.Format("{0,7:##.00}", 2.356);  // "   2.36"
string.Format("{0,-7:##.00}", 2.356); // "2.36   "
string.Format("{0,7:00.00}", 2.356);  // "  02.36"
string.Format("{0,-7:00.00}", 2.356); // "02.36  "

请参阅C#中的小数格式化以获取完整详情。


具体答案

msg = string.Format( "{0,11:#####0     }\n"
                   + "{1,11:#####0.0000}\n"
                   + "{2,11:#####0.000 }\n"
                   + "{3,11:#####0.00  }\n"
                   + "{4,11:#####0.0   }\n"
                   + "{5,11:#####0.0   }\n"
                   + "{6,11:#####0     }\n"
                   ,      0
                   ,      0.0002
                   ,      0.531
                   ,      2.42
                   ,     12.5
                   ,    123.0
                   , 123172
                   );
Console.WriteLine(msg);
Console.ReadLine();

没有适用于所有示例数据的通用格式字符串... 如果您想要一个通用函数,请使用下面Guffa的答案。 - Mark Ronollo

0

虽然由于末尾的零而并非完全回答问题,但这将小数点与4位小数和最多11个字符对齐。

someNumber.ToString("0.0000").PadLeft(11)

例如,以下字符串

0d.ToString("0.0000").PadLeft(11)
0.0002d.ToString("0.0000").PadLeft(11)
0.531d.ToString("0.0000").PadLeft(11)
2.42d.ToString("0.0000").PadLeft(11)
12.5d.ToString("0.0000").PadLeft(11)
123.0d.ToString("0.0000").PadLeft(11)
123172d.ToString("0.0000").PadLeft(11)

     0.0000
     0.0002
     0.5310
     2.4200
    12.5000
   123.0000
123172.0000

在不变文化中。


-2
你可以使用string.format或double的ToString方法来实现。
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;

string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: $19.95.

MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.

MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: Zero.

这篇文章来自 MSDN,如果你需要更多细节,它可以帮助你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接