2014-03-31 68 views
1

如何在C中使用printf來顯示雙精度的全長。如何在C中使用printf顯示雙精度的全長

考慮

int main(){ 

double x = 0.00000000000001; 

printf("x: %f \n", x); 

} 

結果我得到的是「我:0.000000」,但是從我讀%f是正確的格式說明和雙打應該有15-17顯著的數字,因此我不明白爲什麼我得到一個圓整的結果。我也嘗試過諸如%15f和%lf之類的東西。

我使用Ubuntu,如果有幫助。

+0

閱讀有關[表示的數字,轉換和四捨五入(http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding)和[什麼每臺計算機科學家應該知道關於浮點算術](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 –

+1

另外,另外:避免命名花車「我」;-)。即使在這個儘可能短的樣本中,它也是誤導性的,因爲它與一個已經成爲程序員基因庫的一部分的慣例相矛盾。 –

+0

@對不起,我現在改變了。 – User

回答

2

http://linux.die.net/man/3/printf來自:

F,F

double參數是圓形的,並轉換爲十進制表示法中 樣式[ - ] ddd.ddd,其中數字的 小數點後數點字符等於精度規格。 如果 的精度缺失,則取爲6;如果精度爲 顯式爲零,則不會顯示小數點字符。如果出現小數點 點,則至少有一個數字出現在它之前。

+0

謝謝,這也解釋了爲什麼%15f增加了空白。 – User

+0

不客氣。另一方面,你怎麼會錯過? –

+0

我不確定,現在我知道它是如何工作的,我可以在任何地方找到解釋。 – User

1

如果你想在小數點後15位數字輸出,它應該是%.15f而不是%15f

printf("i: %.15f \n", i); 
0

使用,

printf("i: %.15f\n", i); 

精密後小數點指定爲0.15。 「'後指定的號碼。是爲了精確。

0

您可以根據需要在%.<num>f之後打印小數點後的位數。例如;

printf("i: %.15f \n", i); 

它在小數點後打印15位數字。

希望它有幫助...

1

嘗試使用%g而不是%f。請參閱printf規範。

0

,您可以管理的最好的是十六進制的打印

printf("i: %a \n", i); 

http://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html

一,A 表示浮點雙參數號碼應在手冊中轉換e「[ - ] 0xh。hhhhp±d「,其中在小數點前面有一個十六進制數字(如果參數是一個規範化的浮點數並且在其他情況下未指定,則該數字不爲零)和十六進制數字之後的十六進制數字等於精度;如果精度丟失且FLT_RADIX是2的冪,則精度應足以精確表示該值;如果精度丟失且FLT_RADIX不是2的冪,則精度應足夠區分double類型的值,除了尾部零可以省略;如果精度爲零並且未指定'#'標誌,則不會出現小數點字符,字符「abcdef」應用於轉換並且A轉換的字母「ABCDEF」A轉換說明符用'X'和'P'代替'x'和'p'產生一個數字,指數應該總是包含至少一個數字,並且只有更多的數字根據需要表示小數指數爲2.如果該值爲零,則指數應爲零。

表示無窮大或NaN的雙參數應以f或F轉換說明符的形式轉換。