summaryrefslogtreecommitdiff
path: root/Src/params.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/params.c')
-rw-r--r--Src/params.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/Src/params.c b/Src/params.c
index dce65a590..29f6e4072 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -3417,6 +3417,7 @@ char *
convfloat(double dval, int digits, int flags, FILE *fout)
{
char fmt[] = "%.*e";
+ char *prev_locale, *ret;
/*
* The difficulty with the buffer size is that a %f conversion
@@ -3451,16 +3452,24 @@ convfloat(double dval, int digits, int flags, FILE *fout)
digits--;
}
}
+#ifdef USE_LOCALE
+ prev_locale = dupstring(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "POSIX");
+#endif
if (fout) {
fprintf(fout, fmt, digits, dval);
- return NULL;
+ ret = NULL;
} else {
VARARR(char, buf, 512 + digits);
sprintf(buf, fmt, digits, dval);
if (!strchr(buf, 'e') && !strchr(buf, '.'))
strcat(buf, ".");
- return dupstring(buf);
+ ret = dupstring(buf);
}
+#ifdef USE_LOCALE
+ if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
+#endif
+ return ret;
}
/* Start a parameter scope */