1. 程式人生 > >atof 到float 型別 精度損失.`

atof 到float 型別 精度損失.`

原文地址:

字串轉換為浮點數的函式,標準C提供的函式是atof(char *),C++ Builder 提供了一個函式 StrToFloat(AnsiString *),但是如果你直接定義一個浮點數變數,將字串轉換為單精度浮點數的話,很容易出問題,出現精度誤差,下面給出一個簡單的例子

char *strDemo ="0.00100";

float fDat;

fDat = atof(strDemo);

ShowMessage(fDat);

上面程式碼的運算結果為:0.00100000004749475,存在明顯的轉換誤差。


仔細看了一下字串轉換為浮點數的函式定義:double atof(const char *s);

atof()函式的返回值型別是double型別的,如果將其賦值為一個單精度的浮點數,肯定存在精度損失,找到了原因所在,將上面程式碼中的float修改成double,編譯執行,顯示結果為0.001。


OK! 問題解決。