Точность при преобразовании десятичного числа строки

Мне нужен способ конвертировать эту строку в ее точное представление числа. Я пробовал довольно много вещей, и, насколько я знаю, это должно сработать (знаменитые последние слова). Я пытаюсь держаться подальше от установки библиотек, и у меня есть много этих чисел для преобразования.

Я понимаю, что трудно представить длинные десятичные числа в двоичном виде, но мне нужно решение.

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
string data = "138.6470184568";
cout << atof(data.c_str()) << endl;

return 0;
}

Выход

138.647

-1

Решение

Оказывается, что он конвертирует правильно, но, когда его просят подсчитать число, он дает только 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
0

Другие решения


По вопросам рекламы [email protected]