From eb8703fb4df028262ecde4d485d34c78389b9d1c Mon Sep 17 00:00:00 2001 From: trynocoding <71476293+trynocoding@users.noreply.github.com> Date: Fri, 21 Mar 2025 15:24:41 +0800 Subject: [PATCH] fix(zset): preserve double precision during migration (#940) This commit resolves the ZSET score truncation issue caused by using `%f` format specifier, which led to loss of precision for double values. --- internal/rdb/types/zset.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/rdb/types/zset.go b/internal/rdb/types/zset.go index f3604f5..97bbfcd 100644 --- a/internal/rdb/types/zset.go +++ b/internal/rdb/types/zset.go @@ -48,7 +48,7 @@ func (o *ZsetObject) readZset() { for i := 0; i < size; i++ { member := structure.ReadString(rd) score := structure.ReadFloat(rd) - o.cmdC <- RedisCmd{"zadd", o.key, fmt.Sprintf("%f", score), member} + o.cmdC <- RedisCmd{"zadd", o.key, fmt.Sprintf("%.17g", score), member} } } @@ -58,7 +58,7 @@ func (o *ZsetObject) readZset2() { for i := 0; i < size; i++ { member := structure.ReadString(rd) score := structure.ReadDouble(rd) - o.cmdC <- RedisCmd{"zadd", o.key, fmt.Sprintf("%f", score), member} + o.cmdC <- RedisCmd{"zadd", o.key, fmt.Sprintf("%.17g", score), member} } }