Search code examples
c++stringtype-conversionfloating-point-precisionatof

Precision when converting a string decimal number


I need a way to convert this string into its exact number representation. I've tried quite a few things and, from what I know, this should work (famous last words). I'm trying to stay away from installing libraries and I have A LOT of these numbers to convert.

I understand that it is difficult to represent long decimal numbers in binary, but I need a solution.

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

using namespace std;

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

   return 0;
}

Output

138.647

Solution

  • Turns out that it is converting correctly, but, when asked to cout the number, it only gives 3-4 decimal places. Anyone know why?

    #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;
    }
    

    Gives

    277.294
    277.2940369136