格式使用常规数字格式加倍,右键用零填充

时间:2015-03-16 23:28:26

标签: c# string-formatting tostring number-formatting

我试图将各种大小的负数和非负数输出到列中。我想使用G5标准数字格式,以便它在适当的时候采用指数格式(即值非常小),但是常规格式化。但我希望这些值适当地用零填充以在列中排列(即通常在右侧填充零,并且在指数中的E之前填充零)。目前,我只是:

string.Format("{0}  {1}  {2}", a.ToString("G5"), b.ToString("G5"), c.ToString("G5"));

由于它没有填充,因此效果不是很好。我希望我的输出看起来像这样:

 1.234000000  0.123400000  1.23450E-03
 4.56780E-08  -1.2345E-09  0.001234000  // negative signs can line up with everything else
-12.34500000  0.045678900 -1.23450E-06  // or line up with each other, whatever is easier, but not both

我怎样才能做到这一点?

编辑:使用:格式,如{0:10},上述数字会产生:

1.234  0.1234  0.0012345
4.5678E-08  -1.2345E-09  0.001234
-12.345  0.045679  -1.2345E-06

1 个答案:

答案 0 :(得分:0)

您可以使用语法","指定string.format的填充。

样本将是:

string.Format("{0,20} {1,20} {2,20}", a.ToString("G5").PadRight(10, '0'), b.ToString("G5").PadRight(10, '0'), c.ToString("G5").PadRight(10, '0'));

或与-10相同。

逗号后面的数字定义了当前块的字符,PadRight方法用于填充您想要的任何字符。 (' 0'在这种情况下)

不确定为什么你要使用" G5",我认为这会更适合你锻炼:

string.Format("{0} {1,15} {2,15}", a.ToString("E"), b.ToString("E"), c.ToString("E"))

代码:

double a = 0.00000000000000123;
double b = 0.1231;
double c =12312312;

var ccc = string.Format("{0} {1,15} {2,15}", a.ToString("E"), b.ToString("E"), c.ToString("E"));

//Result --> 1.230000E-015   1.231000E-001   1.231231E+007