簡體   English   中英

C ++要精確浮動的字符串

[英]C++ String to float with precision

我有一個帶有數字讀數的文件(例如5.513208E-05 / 1.146383E-05)我讀取文件並將條目存儲在一個臨時字符串中。 之后我將臨時字符串轉換為float變量(我存儲在多維數組中)。 我使用下面的代碼進行轉換。

getline(infile, temporary_string, ',');

Array[i][0] = ::atof(temporary_string.c_str());

getline(infile, temporary_string);

Array[i][1] = ::atof(temporary_string.c_str());

問題是當我將花車打印到屏幕上時

5.51321e-05 1.14638e-05代替5.513208E-05 1.146383E-05

如何獲得存儲的精確數字???

讀取或轉換字符串時,不指定精度。 而是在輸出值時設置精度:

std::cout << std::setprecision(3) << 1.2345 << '\n';

以上將產生以下oputput:

1.23

參見例如此參考文獻

確保你有double Array[][] ,而不是float 文本表示(基數10)總是由二進制浮點數(基數2)近似,但是當使用相同的格式時,運氣近似的atof數具有相同的表示。 通常,一個人不會進行太多計算,並且在輸出中使用精確度或格式的精度降低。

數字的每個浮點表示都具有有限的精度。 特別是, float的二進制尾數有24位(1個固定+ 23個變量),因此意味着大約七位小數的精度。

如果存儲的數字需要更高的精度,您可能希望考慮使用double而不是float 在普通PC上, double對於二進制尾數有53位(1 + 52),因此允許15位十進制數字精度。

但請記住,輸出這些數字時也存在問題。 我認為printf ()和std::ostream的默認精度只有6位數,包括floatdouble ,除非另有說明。 但是,在輸出期間要求比數據類型提供的更高的精度沒有意義。 say printf("%0.30g", some_float) , the extra 23 digits beyond the seven actually supported by the data type might not really produce useful information. 因此,即使您printf("%0.30g", some_float) ,超出數據類型實際支持的七個數字的額外23位數可能不會真正產生有用的信息。

暫無
暫無

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

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