字串轉浮點數,用stoi(),stod(),stof()等庫函式,好像轉換精度不夠,還特別容易出錯。於是就寫了乙個自定義函式double str2num(string),可以轉換包括整數、小數和科學記數法浮點數。**用了double型變數,整數最長可以保留16位。如果覺得還不夠,可以在所有的 double 前添上 long 就能增加到20位精度。還有一點科學記數法只用了e,大寫e注意先轉小寫。小數向0趨近時直接輸出0,大於dbl_max的輸出inf錯;輸入非數字的情況,人為用pow()函式實現輸出nan錯。如果取得的數字串已用正規表示式檢驗過,可以刪除掉兩個注釋符之間的**。
#include #include #include #include using namespace std;
#define isnum(c) (isdigit(c)?c-48:(c=='e'?10:(c=='.'?11:(c=='-'?12:(c=='+'?13:-1)))))
double str2num(string s)
i=0;k=1;
if ((i=s.find('.'))!=s.npos);
for (auto s:a)
cout<"《測試結果如下:
e:\>test
-12->-12
0->0
+12.345->12.345
123456789012345->123456789012345
1.23456789012345e+20->1.23456789012345e+020
-1.5e-2->-0.015
1e2->100
3e1.1->nan
1.7977e+308->inf
4.95e-324->0
1.1.1->nan
1e2e2->nan
abc->nan
1+2->nan
e:\>
最後,還是覺得字串與數字的互轉還用庫函式最方便:
#include #include #include #include using namespace std;
string double2str(double d)
int main()
{ double x;
string str;
for(;;) {
cin >> str;
x=str2double(str);
cout<|"+double2str(x)+"|"<- 編譯器名: tdm-gcc 4.9.2 64-bit release
處理 c++ 原始檔...
--------
- c++ 編譯器: c:\program files (x86)\dev-cpp\mingw64\bin\g++.exe
- 命令: g++.exe "e:\test.cpp" -o "e:\test.exe" -std=c++11 ......................
整數(浮點數)轉字串
在實際專案中,我們不可避免的遇到需要將整數 浮點數 轉換為字串輸出 儲存為檔案或者顯示列印 這是乙個很常見的演算法,標準c庫甚至提供了諸如itoa,ltoa,之類的函式供大家呼叫。但是,在一些特殊場合,比如對功耗要求比較苛刻的場合,則對轉換速度提出了要求。在微控制器應用中,很多mcu沒有除法器,和除...
Python 字串 整數 浮點數
幾個函式 str 將乙個整數或者浮點數變成字串 int 將乙個浮點數或乙個字串變成整數 float 將乙個整數或者字串變成乙個浮點型資料 整數的運算永遠是精確的,而浮點數的運算可能會有四捨五入的誤差 len 可以獲取字串的個數,整數和浮點數沒有這函式 type 可以檢視乙個資料或者變數的型別 有有兩...
c 中字串轉浮點數stod vs atof
背景 程式需要從檔案中讀取double精度的資料。隨著程式的更新,檔案也會更新。但有時候,更新了檔案,卻忘記更新程式,這時啟動程式時,就會coredump。gdb coredump也很容易看出問題,但不能一出問題就讓程式crash啊。於是加了try來catch異常,但是無果,還是dump,於是查了一...