2011-01-27 103 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));