2016-10-31 71 views
0

我想了解爲什麼我沒有在輸出中獲得123.123。我應該使用f而不是lf嗎?爲什麼我在輸出中獲得123.123000?

#include <stdio.h> 

void main() { 
    double foo = 123.123; 
    int blah = 54321; 

    printf("%d\n", blah); 
    printf("%10d \n", blah); 
    printf("%08d\n",blah); 
    printf("%10d \n", blah); 
    printf("%010d \n", blah); 
    printf("%lf\n", foo);  // Why am I getting 123.123000? 
    printf("%.4f\n", foo); 
    printf("%4.2f \n", foo); 
} 
+1

你知道,123.123和123.123000是相同的號碼,對? – immibis

回答

3

你是因爲默認情況下獲得123.123000"%lf"打印到小數點後6位。相反,請使用%.3lf

2

%f的默認精度爲6位小數,因此輸出123.123000

要刪除小數部分的尾隨零(以及小數點,如果沒有剩餘小數),請使用%g

注意,在%lfl是必要的,一個scanf格式將數字轉換成double變量,但它是無用的printf所有浮點值作爲double通過。因此,%lf%f的行爲與printf完全相同。

另請注意,main的原型是int main(void)或`int main(int argc,char * argv [])或等價物。

+0

所以通過替換如果用f將輸出123.123 ..? – Zack

+0

不,你將得到帶有'printf(「%g \ n」,foo)的'123.123';'。 '%lf'和'%f'對於'printf'表現完全一樣。 – chqrlie

+0

因此,如果行爲相同,但只有在閱讀有用的知識輸入時才能使用。謝謝你,先生 – Zack

0

這只是默認的精度。在printf功能%lf%f解釋以相同的方式。真正的區別在於scanf函數,其中%lf將該值讀取爲雙倍值,%f將該值讀取爲浮點值。 這裏有一個有趣的帖子here

+0

因此,當使用scanf讀取輸入時,如果正確使用,您將始終使用它? – Zack

+0

對於合計,是:) – FMiscia

+0

好的,謝謝! – Zack

1

您仍然可以使用%lf,只要告訴它你要多少的精確數字(如3):

printf("%.3lf,\n" foo); //prints 123.123

+0

或者如果你不知道第6個數字中有多少是重要的,請使用'%g'。 – chqrlie

+0

正確,這已經在你的答案中提示過了;-) – davedwards

+0

謝謝你,很高興知道 – Zack

相關問題