簡體   English   中英

雙10小數點精度

[英]Double 10 decimal Point Precision

我們希望確保在將double值轉換為字符串時保留最多10個小數點值。

當我們嘗試%e或%f時,它不會保留超過5個小數點。 當我們嘗試%。14f時,小值(小於1.0e-20)未正確轉換為字符串。

用於為double值保留最多10個小數點的格式字符串是什么?

嘗試使用%.17g打印最合適的雙重格式。

printf("%.17g\n", 10000.);
printf("%.17g\n", 240.0008);
printf("%.17g\n", 0.0000000013);

10000
240.0008
1.3000000000000001e-009

我希望知道, float型(單精度浮點),只有永遠保持精度六個小數位數? 沒有轉換說明符可以提供不存在的精度......( double精度型保持大約15位精度,FYI。)

鏈接: http//en.wikipedia.org/wiki/Floating_point#Internal_representation

更新: JasonD有您更新的問題的答案。 保持后天性。

如果數字很小,Float只能存儲這個十進制數,否則使用double。

在此示例中, %.17g%.14f正常工作:

#include <stdio.h>

int main(void)
{
        double v = 0.12345678912345;
        printf("%.17g   %.14f  \n", v, v);
        return 0;
}

顯示結果:

0.12345678912345   0.12345678912345

從文檔中

f :十進制浮點,小寫392.65

e :科學記數法(尾數/指數),小寫3.9265e + 2

g :使用最短的表示:%e或%f 392.65

所以使用%.14f就可以了

編輯:

小值(小於1.0e-20)未正確轉換為字符串。

要顯示超過20的十進制數,你應該使用long double ...但是如果你只需要存儲1.0e-20並且不需要打印超過6的十進制數,那么float可以保存它。

對於long double,你需要使用%.21Lg類的東西。 例如 :

#include <stdio.h>

int main(void)
{
        long double v = 0.123456789123456789123456789;
        printf("%.21Lg   %.21Lf   \n", v, v);
        return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM