转换字符串十进制数时的精度

Precision when converting a string decimal number

本文关键字:精度 十进制数 字符串 转换      更新时间:2023-10-16

我需要一种方法来将此字符串转换为其确切的数字表示形式。我已经尝试了很多事情,据我所知,这应该有效(著名的遗言)。我试图远离安装库,我有很多这样的数字要转换。

我知道很难用二进制表示长十进制数,但我需要一个解决方案。

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
   string data = "138.6470184568";
   cout << atof(data.c_str()) << endl;
   return 0;
}

输出

138.647

事实证明,它转换正确,但是,当被要求引用数字时,它只给出 3-4 位小数。有人知道为什么吗?

#include <iostream>
#include <stdlib.h>
#include <iomanip>
using namespace std;
int main()
{
   string data1 = "138.6470184568";
   string data2 = "138.6470184568";
   double data3 = atof(data1.c_str()) + atof(data2.c_str());
   cout << data3 << endl;
   cout << setprecision(15) << data3;
   return 0;
}

277.294
277.2940369136