首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC 中無法從字串判斷 float 與 double 的本質原因

     編輯:程式設計疑難解答

結論:純字串無法區分

字串 "3.14" 既可代表 float 也可代表 double,二者在共同精度範圍內的文本表示完全相同。

唯一可判斷場景

  • 數值超出 float 範圍(約 ±3.4e38)或精度超出 float 有效位數(約 7 位十進位數字),則可推斷為 double。
  • 例如 "1.23456789012345" 明顯超過 float 精度,應視為 double。

工程建議

  1. 協議層面約定:傳輸協議(JSON、Protobuf、自定義二進位)明確標註型別,而非靠字串推測。
  2. 統一使用 double:現代硬體 double 效能損失可忽略,避免精度陷阱。
  3. 若必須還原 float:發送端先轉 float 再序列化,接收端按 float 反序列化,接受精度損失。

MFC 實作提示

CString str = "3.1415926535";
double d = _ttof(str); // 或 atof, strtod
float f = (float)d;    // 截斷精度
// 無法從 str 反推原始型別

不要試圖從字串「反推」型別,應在資料產生端就固定好型別契約。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved