summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/xplist.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/xplist.c b/src/xplist.c
index c89b143..fc8fd61 100644
--- a/src/xplist.c
+++ b/src/xplist.c
@@ -107,9 +107,22 @@ static size_t dtostr(char *buf, size_t bufsize, double realval)
107 int64_t v; 107 int64_t v;
108 size_t len; 108 size_t len;
109 size_t p; 109 size_t p;
110 double CORR = 0.0000005;
110 111
111 f = modf(f, &ip); 112 f = modf(f, &ip);
112 len = snprintf(buf, bufsize, "%s%"PRIi64, ((f < 0) && (ip >= 0)) ? "-" : "", (int64_t)ip); 113 v = (int64_t)ip;
114 if (f < 0) {
115 if (((int)((f - CORR) * -10.0f)) >= 10) {
116 v--;
117 f = 0;
118 }
119 } else {
120 if (((int)((f + CORR) * 10.0f)) >= 10) {
121 v++;
122 f = 0;
123 }
124 }
125 len = snprintf(buf, bufsize, "%s%"PRIi64, ((f < 0) && (ip >= 0)) ? "-" : "", v);
113 if (len >= bufsize) { 126 if (len >= bufsize) {
114 return 0; 127 return 0;
115 } 128 }
@@ -117,7 +130,7 @@ static size_t dtostr(char *buf, size_t bufsize, double realval)
117 if (f < 0) { 130 if (f < 0) {
118 f *= -1; 131 f *= -1;
119 } 132 }
120 f += 0.0000004; 133 f += CORR;
121 134
122 p = len; 135 p = len;
123 buf[p++] = '.'; 136 buf[p++] = '.';