[英]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.