在軟件開發中我們經常遇到數據精度處理問題。
先看如下代碼
#include <stdio.h> #include <stdlib.h> #include <string.h>
int main ( void )
{
char *s="0.100001200";
fprintf ( stderr, "%f\n",atof(s));
return 0;
}
以上代碼編譯後執行,結果如下:
$ 0.100001
$
問題出在哪裡,是 atof 函數的問題? 將 atof(s) 替換成 strtod(s,NULL) 後,結果依然如此。
經過測試,發現並非是 atof 或 strtod 函數轉換時精度丟失,而是 %f 的格式化輸出符默認的輸出為小數點後面 6 位的精度。
我們將上面的代碼修改為:
#include <stdio.h> #include <stdlib.h> #include <string.h>
int main ( void )
{
char *s="0.100001200";
fprintf ( stderr, "%18.10f\n",atof(s));
return 0;
}
編譯後執行,結果如下
$ 0.100001200
$
*