I. *_*mad 2 c++ floating-point qnx
std::istringstream将字符串转换为long double时会丢失精度.我可以使用类似的东西std::fixed还是std::setprecision()?
我正在使用c ++ 11并以QNX平台为目标.
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
int main(){
long double convertedNumber;
std::string numberString ("5.94865747678615882510631e+4931");
//From string to long double
std::istringstream iss(numberString);
iss >> convertedNumber;
std::cout<< std::setprecision(30) << numberString << "\n";
std::cout<< std::setprecision(30) << convertedNumber << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
5.94865747678615882510631e+4931
5.9486574767861588254e+4931
Run Code Online (Sandbox Code Playgroud)
您遇到的问题与您的使用setprecision或流无关.
80位双long double精度()不足以存储您想要以您想要的精度存储的数字.80位双精度的尾数为64位,这意味着它可以表示的数字精度与64位整数相同,后者本身仅限于19 [十进制]数值.您尝试存储的值是(5.9486_57476_78615_88251_0631)24位十进制数值,这意味着它太精确,无法由您的程序准确表示.
如果要将此值存储在程序中,则需要将其保存在字符串表示形式中,或者找到用于表示/操作这些数字的任意精度库.我的建议是使用boost.multiprecision库,但它取决于您的组织/任务允许使用C++ Boost库.