Skip to content

fix(string,hash): use compact float format in IncrByFloat to match Redis#3427

Merged
jihuayu merged 4 commits into
apache:unstablefrom
songqing:fix/incrbyfloat-storage-format
Apr 8, 2026
Merged

fix(string,hash): use compact float format in IncrByFloat to match Redis#3427
jihuayu merged 4 commits into
apache:unstablefrom
songqing:fix/incrbyfloat-storage-format

Conversation

@songqing

@songqing songqing commented Apr 8, 2026

Copy link
Copy Markdown
Contributor
Previously, String::IncrByFloat and Hash::IncrByFloat used
std::to_string(double) to persist float values, which produces C-style
%f format with 6 fixed decimal places (e.g., "10.500000"). Redis uses a
compact %g-like format that strips trailing zeros (e.g., "10.5").

This caused GET/HGET after INCRBYFLOAT/HINCRBYFLOAT to return values
like "10.500000" instead of "10.5", breaking Redis protocol compatibility.

Replace std::to_string with util::Float2String (which uses fmt {:.17g})
in both String::IncrByFloat and Hash::IncrByFloat. The INCRBYFLOAT
command reply already used Float2String correctly; this fix aligns the
stored representation with both the reply format and Redis behavior.

@jihuayu jihuayu enabled auto-merge (squash) April 8, 2026 07:25
@jihuayu jihuayu merged commit 4aede36 into apache:unstable Apr 8, 2026
37 checks passed
@sonarqubecloud

sonarqubecloud Bot commented Apr 8, 2026

Copy link
Copy Markdown

nagisa-kunhah pushed a commit to nagisa-kunhah/kvrocks that referenced this pull request Apr 29, 2026
…dis (apache#3427)

Previously, String::IncrByFloat and Hash::IncrByFloat used
std::to_string(double) to persist float values, which produces C-style
%f format with 6 fixed decimal places (e.g., "10.500000"). Redis uses a
    compact %g-like format that strips trailing zeros (e.g., "10.5").

    This caused GET/HGET after INCRBYFLOAT/HINCRBYFLOAT to return values
like "10.500000" instead of "10.5", breaking Redis protocol
compatibility.

Replace std::to_string with util::Float2String (which uses fmt {:.17g})
    in both String::IncrByFloat and Hash::IncrByFloat. The INCRBYFLOAT
command reply already used Float2String correctly; this fix aligns the
    stored representation with both the reply format and Redis behavior.

Co-authored-by: 纪华裕 <jihuayu123@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants