我正在使用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 ++的范围,那么我就可以使用该值。
有没有内置的函数可以做到这一点,还是我需要编写一个单独的函数来解析字符串并检查精度?另外,我需要检查是否需要手动解析字符串吗?
答案 0 :(得分:1)
您可以先使用double
将其解析为std::stod
,然后将其分配给float
。然后检查float
是否为0
,正/负无穷大和NaN
。
答案 1 :(得分:1)
也许,最安全的方法是使用std::stod()
,将其保存为临时double,然后检查std::numeric_limits<float>::max()
和std::numeric_limits<float>::min()
。