2011-01-27 100 views
0

我试图格式化一个数字,其值为0到9,999。我想2最显著位始终显示,即Printf数字右对齐

5000 - > 50
0000 - > 00

如果其中至少显著数字为非零他们应显示,即

150 - > 015
101 - > 0101

它可以与一些两轮牛车来完成,但是可以C的printf直接做到这一点?

+0

我不知道我理解你的格式。如果5000变为50为什么150变成015而不是15? – Mala 2011-01-27 17:58:40

+0

我正在做美分,如果需要千分之一,如果需要千分之一。 – Jonathan 2011-01-27 18:13:49

回答

1

丑陋,但据工作,我可以告诉:

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); 
3

是的,你可以使用printf这个

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

显然可以添加第三种情况来正确处理“150”,但这是唯一的方法吗? – Jonathan 2011-01-27 18:06:34

+0

是的,您可以根据需要添加尽可能多的个案。这只是一个例子,如何用`printf`格式化数字。我认为没有更好的方法可以在`C` – Elalfer 2011-01-27 18:26:49

-1

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));