我有以下代码:

#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::stolstd::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

09-26 21:12
查看更多