【问题标题】:Format doubles with General numeric format and pad right with zeros格式加倍使用通用数字格式并用零填充
【发布时间】:2015-05-19 06:29:52
【问题描述】:

我正在尝试将各种大小的双精度数(负数和非负数)输出到列中。我想使用 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

【问题讨论】:

  • 可以使用","like--> string.Format("{0,10} {1,10....",...)

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


【解决方案1】:

您可以使用语法“,”来指定 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       

【讨论】:

  • 那没有做任何事情(我尝试了 10 和 -10)。我使用上述数字的输出是(我将添加到我的问题以获得更好的格式):1.234 0.1234 0.00123454.5678E-08 -1.2345E-09 0.001234-12.345 0.045679 -1.2345E-06
  • 不会在指数之后填充 0,即 ...E-0300 吗?
  • 是的,它会...为什么不用“E”来代替?
  • 因为我更喜欢 12.345 到 1.2345E+01 和 .12345 到 1.2345E-01。即使我使用了 E,我如何在 E 之前填充 0?
猜你喜欢
  • 1970-01-01
  • 2012-03-20
  • 2021-04-26
  • 2019-08-27
  • 2015-04-29
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多