C++ 将字符串精确转换为双精度

dod*_*lue 0 c++ string double atof strtod

我需要将字符串转换为精度高达 15 位的双精度数

我读过很多文章和类似的问题,他们建议在将数字打印到屏幕上时使用 set precision(15) 。

例如:

string line = "34.9438553";
double lon1 = strtod(line.c_str(),NULL);
Run Code Online (Sandbox Code Playgroud)

如果我写

cout << lon1;
Run Code Online (Sandbox Code Playgroud)

它只会打印 34.9439 而不是 34.9438553

我本来可以写

cout << setprecision(15) << lon1;
Run Code Online (Sandbox Code Playgroud)

它会工作,但我需要变量 lon1 本身具有 15 位精度,因为我需要变量内的整个数字,而不仅仅是在将其打印到屏幕上时。

有谁知道该怎么做?

Ell*_*son 5

setprecision设置打印的精度,而不是双精度的精度。strtod将双精度型读入双精度型或字符串中可用精度的最小值(在本例中受字符串限制)。

简而言之,lon1通过使用 ,您已经获得了字符串的完整精度strtod