gpt4 book ai didi

c - printf:如何在小数点对齐数字

转载 作者:太空狗 更新时间:2023-10-29 15:25:26 24 4
gpt4 key购买 nike

考虑有一组数字:

my @array =   (
1.788139343e-007, 0.0547055073198, -0.703213036125,
-0.583665880391, -1.41198285298, +0.171879081676,
-0.58966025098, -86.0627173425, -0.84449797709,
3.49876623321e-005, 3.02660429162, -0.256948695361);

我想让小数点在总宽度为 m 的第 n 列对齐(也许 n=6 和 m=25)

如果使用 %f 我会得到很好对齐的数字,但需要科学记数法的数字会被破坏。使用 %g 将点后的精度参数解释为绝对精度,从而在小数点后产生不同的小数。而且由于大多数数字都在 (-10, 10) 范围内,所以我不想采用科学记数法 %e

是否有任何标志或格式属性(或它们的组合)被我忽略了?

预期的结果是:

foreach my $f (@array){
printf("[%+25.12g]$/", $f);
}


[ +1.788139343e-007 ]
[ +0.0547055073198 ]
[ -0.703213036125 ]
[ -0.583665880391 ]
[ -1.41198285298 ]
[ +0.0171879081676 ]
[ -0.58966025098 ]
[ -86.0627173425 ]
[ -0.84449797709 ]
[ +3.49876623321e-005 ]
[ +3.02660429162 ]
[ -0.256948695361 ]

甚至更好

[   +1.7881393430000e-007 ]
[ +0.0547055073198 ]
[ -0.7032130361250 ]
[ -0.5836658803910 ]
[ -1.4119828529800 ]
[ +0.0171879081676 ]
[ -0.5896602509800 ]
[ -86.0627173425000 ]
[ -0.8444979770900 ]
[ +3.4987662332100e-005 ]
[ +3.0266042916200 ]
[ -0.2569486953610 ]

(问题是关于 Perl 的,但是 s?printf 的格式字符串是相当独立的,所以我也添加了 C 标签)

最佳答案

[*]printf 函数允许您:

  • 获取已写入的字符数,
  • 添加一些填充。

因此,如果您知道点之前有多少字符 (d = sprintf(buf, "%.0f", ar[i]));),您可以使用 (printf("[%*s %g", 4-d, "", ar[i]);).

然后用同样的逻辑来对齐右括号:

#include <stdio.h>

int main()
{
double ar[] = {
1.788139343e-007, 0.0547055073198, -0.703213036125,
-0.583665880391, -1.41198285298, 0.171879081676,
-0.58966025098, -86.0627173425, -0.84449797709,
3.49876623321e-005, 3.02660429162, -0.256948695361};

for (int i = 0; i < 12; ++i)
{
/* buffer to count how much character are before the dot*/
char buf[64];

/* how much before the dot? */
int d = sprintf(buf, "%+.0lf", ar[i]);

/* write float with aligned dot and store second padding */
int e = printf("[%*s %+.15lg", 4-d, "", ar[i]);
printf("%*s]\n", 25-e, "");

}
return 0;
}

给予:

[   +1.788139343e-07     ]
[ +0.0547055073198 ]
[ -0.703213036125 ]
[ -0.583665880391 ]
[ -1.41198285298 ]
[ +0.171879081676 ]
[ -0.58966025098 ]
[ -86.0627173425 ]
[ -0.84449797709 ]
[ +3.49876623321e-05 ]
[ +3.02660429162 ]
[ -0.256948695361 ]

关于c - printf:如何在小数点对齐数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53738961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com