diff options
| -rw-r--r-- | src/xplist.c | 17 |
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++] = '.'; |
