The value didn't change.
0.93028594D+02 = 0.93028594E+02 = 0.93028594 * 10^02 = 93.028595
D10.8 simply says make the field 10 characters wide, and put 8 of them after the decimal.
If you don't want to change the D to an E manually, you can first read a line or a number out of the file into a buffer. Next, you could use strchr to find the location of the letter 'D' in your input buffer and change that character to an 'E'. Then you can use sscanf to convert the string representation into a decimal:
Code:
double data;
char buf[20]; // I don't know an appropriate size for your data
char *c;
if (fgets(buf, sizeof(buf), fp) != NULL) {
c = strchr(buf, 'D');
if (c == NULL) {
// uh oh, there is no 'D' in the string
}
*c = 'E';
// buf now contains something like "0.93028594D+02"
if (sscanf(buf, "%e", &data) != 1) {
// we had an error parsing the number
}
}
That would work if your input file had one number per line. Otherwise, you would have to use scanf with the %s or %[] format string to grab just the contents of jone number on that line, then go through with the strchr and sscanf bit.