处理stof超出范围错误

时间:2018-06-20 14:23:31

标签: c++

我正在使用websocket将一些浮点值作为字符串从JavaScript发送到C ++。现在,当将值从字符串转换回浮点数时,有时会出现out of range错误,因为精度太高,例如代码中的输入值:

#include <string>
#include <iostream>
using namespace std;
int main() {
    try {
        string ans = "1.6704779438076223e-52";
        float val = stof(ans);
        cout << val << endl;
    }
    catch (exception &ex) {
        cout << ex.what() << endl;
    }
    return 0;
}

我想做的是降低精度,如果它超出了c ++的范围,那么我就可以使用该值。

有没有内置的函数可以做到这一点,还是我需要编写一个单独的函数来解析字符串并检查精度?另外,我需要检查是否需要手动解析字符串吗?

2 个答案:

答案 0 :(得分:1)

您可以先使用double将其解析为std::stod,然后将其分配给float。然后检查float是否为0,正/负无穷大和NaN

答案 1 :(得分:1)

也许,最安全的方法是使用std::stod(),将其保存为临时double,然后检查std::numeric_limits<float>::max()std::numeric_limits<float>::min()