ROOT rounds to Integers

There is NO " >>exact<< Double_t". This is a “Floating point” value in a “Double-precision floating-point format”.
See especially “Floating point - Representable numbers, conversion and rounding”.

If you "#include ", both “strtod” and “atof” return a “double” value:
double strtod(const char *nptr, char **endptr);
double atof(const char *nptr);
(See “man strtod” and “man atof”.)

BTW. In your “ReadData.C”, you are missing something like “Double_t val;” (and “continue;// exit if file not found” should be changed into “return;// exit if file not found”). Try to precompile your macro using (inspect all reported warnings and errors):
root [0] .L ReadData.C++