From e5acfb0a700012323a6478e1b45595f9c0519ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=90=8D?= Date: Sun, 20 Sep 2026 10:31:27 +0800 Subject: [PATCH] [fix][misc] Preserve the sign of negative fractions in text output Assisted-by: OpenAI Codex --- .../utils/SimpleTextOutputStreamTest.java | 23 +++++++++++++++++++ .../common/util/SimpleTextOutputStream.java | 3 +++ 2 files changed, 26 insertions(+) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/utils/SimpleTextOutputStreamTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/utils/SimpleTextOutputStreamTest.java index 59aab86afd18a..920c9ec49fed2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/utils/SimpleTextOutputStreamTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/utils/SimpleTextOutputStreamTest.java @@ -24,6 +24,7 @@ import java.nio.charset.StandardCharsets; import org.apache.pulsar.common.util.SimpleTextOutputStream; import org.testng.annotations.BeforeMethod; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @Test(groups = "utils") @@ -104,6 +105,28 @@ public void testDoubleFormat() { assertEquals(str(), "-123456.100"); } + @DataProvider + public Object[][] fractionalValues() { + return new Object[][] { + {-0.5, "-0.500"}, + {-0.05, "-0.050"}, + {-0.005, "-0.005"}, + {-0.0005, "-0.0"}, + {0.5, "0.500"}, + {0.0005, "0.0"} + }; + } + + @Test(dataProvider = "fractionalValues") + public void testFractionalDoubleFormat(double value, String expected) { + try { + stream.write(value); + assertEquals(buf.toString(StandardCharsets.UTF_8), expected); + } finally { + buf.release(); + } + } + @Test public void testString() { stream.writeEncoded("�\b`~�ýý8ýH\\abcd\""); diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/SimpleTextOutputStream.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/SimpleTextOutputStream.java index d3f319bd958ba..4b93dda053788 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/SimpleTextOutputStream.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/SimpleTextOutputStream.java @@ -125,6 +125,9 @@ public SimpleTextOutputStream write(long n) { public SimpleTextOutputStream write(double d) { long i = (long) d; + if (d < 0 && i == 0) { + write('-'); + } write(i); long r = Math.abs((long) (1000 * (d - i)));