parent
5bd3b9d93f
commit
92c5ab4029
2
src/db.c
2
src/db.c
@ -381,7 +381,7 @@ void scanCallback(void *privdata, const dictEntry *de) {
|
|||||||
} else if (o->type == REDIS_ZSET) {
|
} else if (o->type == REDIS_ZSET) {
|
||||||
key = dictGetKey(de);
|
key = dictGetKey(de);
|
||||||
incrRefCount(key);
|
incrRefCount(key);
|
||||||
val = createStringObjectFromLongDouble(*(double*)dictGetVal(de));
|
val = createStringObjectFromLongDouble(*(double*)dictGetVal(de),0);
|
||||||
} else {
|
} else {
|
||||||
redisPanic("Type not handled in SCAN callback.");
|
redisPanic("Type not handled in SCAN callback.");
|
||||||
}
|
}
|
||||||
|
12
src/object.c
12
src/object.c
@ -109,9 +109,11 @@ robj *createStringObjectFromLongLong(long long value) {
|
|||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note: this function is defined into object.c since here it is where it
|
/* Create a string object from a long double. If humanfriendly is non-zero
|
||||||
* belongs but it is actually designed to be used just for INCRBYFLOAT */
|
* it does not use exponential format and trims trailing zeroes at the end,
|
||||||
robj *createStringObjectFromLongDouble(long double value) {
|
* however this result in loss of precision. Otherwise exp format is used
|
||||||
|
* and the output of snprintf() is not modified. */
|
||||||
|
robj *createStringObjectFromLongDouble(long double value, int humanfriendly) {
|
||||||
char buf[256];
|
char buf[256];
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
@ -120,6 +122,7 @@ robj *createStringObjectFromLongDouble(long double value) {
|
|||||||
* that is "non surprising" for the user (that is, most small decimal
|
* that is "non surprising" for the user (that is, most small decimal
|
||||||
* numbers will be represented in a way that when converted back into
|
* numbers will be represented in a way that when converted back into
|
||||||
* a string are exactly the same as what the user typed.) */
|
* a string are exactly the same as what the user typed.) */
|
||||||
|
if (humanfriendly) {
|
||||||
len = snprintf(buf,sizeof(buf),"%.17Lf", value);
|
len = snprintf(buf,sizeof(buf),"%.17Lf", value);
|
||||||
/* Now remove trailing zeroes after the '.' */
|
/* Now remove trailing zeroes after the '.' */
|
||||||
if (strchr(buf,'.') != NULL) {
|
if (strchr(buf,'.') != NULL) {
|
||||||
@ -130,6 +133,9 @@ robj *createStringObjectFromLongDouble(long double value) {
|
|||||||
}
|
}
|
||||||
if (*p == '.') len--;
|
if (*p == '.') len--;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
len = snprintf(buf,sizeof(buf),"%.17Lg", value);
|
||||||
|
}
|
||||||
return createStringObject(buf,len);
|
return createStringObject(buf,len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1116,7 +1116,7 @@ robj *tryObjectEncoding(robj *o);
|
|||||||
robj *getDecodedObject(robj *o);
|
robj *getDecodedObject(robj *o);
|
||||||
size_t stringObjectLen(robj *o);
|
size_t stringObjectLen(robj *o);
|
||||||
robj *createStringObjectFromLongLong(long long value);
|
robj *createStringObjectFromLongLong(long long value);
|
||||||
robj *createStringObjectFromLongDouble(long double value);
|
robj *createStringObjectFromLongDouble(long double value, int humanfriendly);
|
||||||
robj *createListObject(void);
|
robj *createListObject(void);
|
||||||
robj *createZiplistObject(void);
|
robj *createZiplistObject(void);
|
||||||
robj *createSetObject(void);
|
robj *createSetObject(void);
|
||||||
|
@ -565,7 +565,7 @@ void hincrbyfloatCommand(redisClient *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
value += incr;
|
value += incr;
|
||||||
new = createStringObjectFromLongDouble(value);
|
new = createStringObjectFromLongDouble(value,1);
|
||||||
hashTypeTryObjectEncoding(o,&c->argv[2],NULL);
|
hashTypeTryObjectEncoding(o,&c->argv[2],NULL);
|
||||||
hashTypeSet(o,c->argv[2],new);
|
hashTypeSet(o,c->argv[2],new);
|
||||||
addReplyBulk(c,new);
|
addReplyBulk(c,new);
|
||||||
|
@ -397,7 +397,7 @@ void incrbyfloatCommand(redisClient *c) {
|
|||||||
addReplyError(c,"increment would produce NaN or Infinity");
|
addReplyError(c,"increment would produce NaN or Infinity");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
new = createStringObjectFromLongDouble(value);
|
new = createStringObjectFromLongDouble(value,1);
|
||||||
if (o)
|
if (o)
|
||||||
dbOverwrite(c->db,c->argv[1],new);
|
dbOverwrite(c->db,c->argv[1],new);
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user