Search code examples
c++fstreamtruncatefloating-point-precisiondigits

C++ precision of numbers and truncation with fstream


I have a file.txt with hundreds of numbers. They have many digits (max 20) after the point and I need to get them all without truncation, otherwise they introduce errors in the following computations. I made these numbers with matlab so it has a monstrous precision but now I must replicate this behaviour in my program.

I've done this way:

 fstream in;
 in.open(file.txt, ios::in);
 long double number;
 in>>number;

I also tried this

 in.precision(20);
 in>>number;

before each ">>" operation but it is vain


Solution

  • The following works fine on my system (Win7, VS2012):

    #include <fstream>
    #include <iostream>
    
    int main (void)
    {
        std::ifstream file ("test.txt") ;
    
        long double d = 0 ;
        file >> d ;
    
        std::cout.precision (20) ;
        std::cout << d << "\n" ;
    
    
        return 0 ;
    }
    

    The text file:

    2.7239385667867091

    The output:

    2.7239385667867091

    If this doesn't work on your system, then you need to use a third-party number library.