C 字串轉浮點數,包括整數 小數和科學記數法

2021-10-14 23:49:55 字數 1456 閱讀 1621

字串轉浮點數,用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,於是查了一...