I donβt think there is such an internal format. You need to format it yourself (not tested):
void fprintf_float(FILE* f, double value) { if (-1e11 < value && value < 1e11) { double d = fabs(value); const char* sign = d > 0 ? "" : "-"; double ipart, fpart; char fpartstr[16]; int pos; fpart = modf(d, &ipart); snprintf(fpartstr, 16, "%.9f", fpart); for (pos = 10 ; pos > 0; -- pos) if (fpartstr[pos] != '0' && fpartstr[pos] != '.') break; fpartstr[pos+1] = '\0'; fprintf(f, "%s%.11g%s", sign, ipart, fpartstr+1); } else { fprintf(f, "%.10e", value); } }
source share