Printf 数字右对齐

发布于 2024-10-14 11:55:27 字数 218 浏览 3 评论 0原文

我正在尝试格式化一个值从 0 到 9,999 的数字。我希望始终显示 2 位最高有效数字,即

5000 -> 50
0000-> 00

如果任一最低有效数字非零,则应显示它们,即

150 -> 00 015
101-> 0101

可以通过一些 hackery 来完成,但是 C 的 printf 可以直接做到这一点吗?

I'm trying to format a number that has a value from 0 to 9,999. I would like the 2 most significant digits to always display, i.e.

5000 -> 50
0000 -> 00

If either of the least significant digits are non-zero they should be displayed, i.e.

150 -> 015
101 -> 0101

It can be done with some hackery, but can C's printf do this directly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

琉璃繁缕 2024-10-21 11:55:28

是的,您可以使用 printf 来实现此目的

int v = 5000;
if ((v % 100) != 0)
    printf("%04d", v);
else
    printf("%02d", v/100);

Yes you can use printf for this

int v = 5000;
if ((v % 100) != 0)
    printf("%04d", v);
else
    printf("%02d", v/100);
把时间冻结 2024-10-21 11:55:28

丑陋,但据我所知,我正在努力:

printf("%d", value / 1000);
printf("%d", (value % 1000) / 100);
if(value % 100) printf("%d", (value % 100) / 10);
if(value % 10)  printf("%d", value % 10);

我会尝试更多地打高尔夫球:

printf("%02d", value / 100);
if(value % 10) printf("%02d", value % 100);
else if(value % 100) printf("%d", (value % 100) / 10);

int hi = value / 100, lo = value % 100;
printf(lo ? "%02d%0*d" : "%02d", hi, 1 + !!(lo % 10), lo % 10 ? lo : lo / 10);

Ugly, but working as far as I can tell:

printf("%d", value / 1000);
printf("%d", (value % 1000) / 100);
if(value % 100) printf("%d", (value % 100) / 10);
if(value % 10)  printf("%d", value % 10);

I'll try to golf it some more:

printf("%02d", value / 100);
if(value % 10) printf("%02d", value % 100);
else if(value % 100) printf("%d", (value % 100) / 10);

int hi = value / 100, lo = value % 100;
printf(lo ? "%02d%0*d" : "%02d", hi, 1 + !!(lo % 10), lo % 10 ? lo : lo / 10);
空气里的味道 2024-10-21 11:55:28

printf("%d", v/(v%100?v%10?100:10:1));

试试这个:

printf("% .*d", 4-!(v%100)-!(v%10), v/(v%100?v%10?100:10:1));

printf("%d", v/(v%100?v%10?100:10:1));

Try this:

printf("%.*d", 4-!(v%100)-!(v%10), v/(v%100?v%10?100:10:1));

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文