2011-02-15 92 views
36

我有一個浮點數,如4917.24。我想打印它始終有小數點前五個字符,前導零,小數點後三位數字。printf與前導零在C

我在我使用的嵌入式系統上試過printf("%05.3f", n),但它打印*****。我有格式說明符是否正確?

回答

48

您的格式說明符不正確。從我的機器上的printf()手冊頁:

0零「0」字符表示零填充應使用,而不是空白填充。 A'-'優先於'0''如果兩者都被使用;

字段寬度: 可選數字字符串,指定字段寬度;如果輸出字符串的字符數少於字段寬度,則會在左側(或右側,如果已經給出左側調整指示符)空白填充以構成字段寬度(請注意,前導零是標記,但嵌入的零是字段寬度的一部分);

精密:可選期間,「.」,後跟一個可選的數字字符串,給出一個精確的,它指定在小數點後出現的位數,爲È˚F格式,或從字符串打印的最大字符數;如果數字字符串丟失,則精度被視爲零;

對於您的情況,您的格式將%09.3f

#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    printf("%09.3f\n", 4917.24); 
    return 0; 
} 

輸出:

$ make testapp 
cc  testapp.c -o testapp 
$ ./testapp 
04917.240 

注意,這個答案是具有printf()實現嵌入式系統的條件是標準 - 符合這些細節 - 許多嵌入式環境不要有這樣的實現。

+0

謝謝,我看到我正在犯的錯誤。得到它在PC上工作,我的嵌入式系統仍然沒有正確格式,將不得不做的工作。 – 2011-02-15 18:26:25