C++ 实现科学计数法string转double
用于将形如"+2.449E+2"的科学计数法字符串转为244.9的浮点型数值
代码如下, 如有疏漏, 欢迎指正
1 double sci2db(const std::string &strSci) 2 { 3 int iPower = 0; //幂 4 double dMntsa = 0; //尾数 5 double dCoefficient = 1; //系数 6 7 std::string strPower, strMntsa; 8 9 if (std::string::npos == strSci.find("E")) 10 { 11 return atof(strSci.c_str()); 12 } 13 14 strMntsa = strSci.substr(0, strSci.find("E")); 15 strPower = strSci.substr(strSci.find("E") + 1); 16 17 dMntsa = atof(strMntsa.c_str()); 18 iPower = atoi(strPower.c_str()); 19 20 while (iPower != 0) 21 { 22 if (iPower > 0) 23 { 24 dCoefficient *= 10; 25 iPower--; 26 } 27 else 28 { 29 dCoefficient *= 0.1; 30 iPower++; 31 } 32 } 33 34 return dMntsa * dCoefficient; 35 }
使用intel i5-8265U @ 1.60GHz 1.80GHz, 对字符串"+2.449E+2"转换1000次用时1200ms左右
如果通过一个'0'~'9'的数表自行实现for循环替换atof, atoi的话, 同样条件转换1000次用时1000ms左右, 但是对入参的容错率很低, atof和atoi函数对入参的容错率很高
大家如果有兴趣可以自己尝试一下