diff options
Diffstat (limited to 'src/port/snprintf.c')
-rw-r--r-- | src/port/snprintf.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/port/snprintf.c b/src/port/snprintf.c index 31438dded45..d1c201fd9d6 100644 --- a/src/port/snprintf.c +++ b/src/port/snprintf.c @@ -1181,6 +1181,22 @@ fmtfloat(double value, char type, int forcesign, int leftjust, } if (vallen < 0) goto fail; + + /* + * Windows, alone among our supported platforms, likes to emit + * three-digit exponent fields even when two digits would do. Hack + * such results to look like the way everyone else does it. + */ +#ifdef WIN32 + if (vallen >= 6 && + convert[vallen - 5] == 'e' && + convert[vallen - 3] == '0') + { + convert[vallen - 3] = convert[vallen - 2]; + convert[vallen - 2] = convert[vallen - 1]; + vallen--; + } +#endif } padlen = compute_padlen(minlen, vallen + zeropadlen, leftjust); @@ -1298,6 +1314,17 @@ pg_strfromd(char *str, size_t count, int precision, double value) target.failed = true; goto fail; } + +#ifdef WIN32 + if (vallen >= 6 && + convert[vallen - 5] == 'e' && + convert[vallen - 3] == '0') + { + convert[vallen - 3] = convert[vallen - 2]; + convert[vallen - 2] = convert[vallen - 1]; + vallen--; + } +#endif } } |