我有以下代码:
#include <iostream>
int main() {
long l1 = std::stol("4.2e+7");
long l2 = std::stol("3E+7");
long l3 = 3E7;
printf("%d\n%d\n%d\n", l1, l2, l3);
return 0;
}
预期的输出是
42000000, 3000000, 3000000
,但是实际的输出是(在ideone C++ 14和VS2013上测试):4
3
30000000
为什么会这样,又是否有必要使
std::stol
考虑科学计数法? 最佳答案
您要查找的函数是std::stof
而不是std::stol
。 std::stof
在后台调用std::strtod
,它支持科学计数法。但是,std::stol
在后台调用std::strtol
,而实际上没有。
#include <iostream>
#include <string>
int main() {
long l1 = std::stof("4.2e+7");
long l2 = std::stof("3E+7");
long l3 = 3E7;
std::cout << l1 << "\n" << l2 << "\n" << l3;
return 0;
}
输出:
42000000
30000000
30000000