]> git.saurik.com Git - redis.git/commitdiff
Result of INCRBYFLOAT and HINCRBYFLOAT should never be in exponential form, and also...
authorantirez <antirez@gmail.com>
Thu, 22 Mar 2012 17:14:32 +0000 (18:14 +0100)
committerantirez <antirez@gmail.com>
Thu, 22 Mar 2012 17:14:32 +0000 (18:14 +0100)
src/object.c

index ccb07208511c45e593d07f6bc0e80cc78ce6d4e0..9699ea53e314fcb90483f55bc1bb0608a971c367 100644 (file)
@@ -48,7 +48,7 @@ robj *createStringObjectFromLongLong(long long value) {
 /* Note: this function is defined into object.c since here it is where it
  * belongs but it is actually designed to be used just for INCRBYFLOAT */
 robj *createStringObjectFromLongDouble(long double value) {
 /* Note: this function is defined into object.c since here it is where it
  * belongs but it is actually designed to be used just for INCRBYFLOAT */
 robj *createStringObjectFromLongDouble(long double value) {
-    char buf[256];
+    char buf[256], *p;
     int len;
 
     /* We use 17 digits precision since with 128 bit floats that precision
     int len;
 
     /* We use 17 digits precision since with 128 bit floats that precision
@@ -56,7 +56,16 @@ robj *createStringObjectFromLongDouble(long double value) {
      * that is "non surprising" for the user (that is, most small decimal
      * numbers will be represented in a way that when converted back into
      * a string are exactly the same as what the user typed.) */
      * that is "non surprising" for the user (that is, most small decimal
      * numbers will be represented in a way that when converted back into
      * a string are exactly the same as what the user typed.) */
-    len = snprintf(buf,sizeof(buf),"%.17Lg", value);
+    len = snprintf(buf,sizeof(buf),"%.17Lf", value);
+    /* Now remove trailing zeroes after the '.' */
+    if ((p = strchr(buf,'.')) != NULL) {
+        p = buf+len-1;
+        while(*p == '0') {
+            p--;
+            len--;
+        }
+        if (*p == '.') len--;
+    }
     return createStringObject(buf,len);
 }
 
     return createStringObject(buf,len);
 }