diff -up ./top/top.c.ori ./top/top.c
--- ./top/top.c.ori 2018-01-15 14:04:42.403457405 +0100
+++ ./top/top.c 2018-01-15 14:07:59.663713707 +0100
@@ -1260,15 +1260,25 @@ static char *ioline (const char *prompt)
/*
- * Make locale aware float (but maybe restrict to whole numbers). */
+ * Make locale unaware float (but maybe restrict to whole numbers). */
static int mkfloat (const char *str, float *num, int whole) {
- char *ep;
+ char tmp[SMLBUFSIZ], *ep;
- if (whole)
+ if (whole) {
*num = (float)strtol(str, &ep, 0);
- else
- *num = strtof(str, &ep);
- if (ep != str && *ep == '\0' && *num < INT_MAX)
+ if (ep != str && *ep == '\0' && *num < INT_MAX)
+ return 1;
+ return 0;
+ }
+ snprintf(tmp, sizeof(tmp), "%s", str);
+ *num = strtof(tmp, &ep);
+ if (*ep != '\0') {
+ // fallback - try to swap the floating point separator
+ if (*ep == '.') *ep = ',';
+ else if (*ep == ',') *ep = '.';
+ *num = strtof(tmp, &ep);
+ }
+ if (ep != tmp && *ep == '\0' && *num < INT_MAX)
return 1;
return 0;
} // end: mkfloat