diff --git a/pulsar-cli-utils/src/main/java/org/apache/pulsar/cli/converters/RelativeTimeUtil.java b/pulsar-cli-utils/src/main/java/org/apache/pulsar/cli/converters/RelativeTimeUtil.java index 412a6415e3c31..aa6b8e0762865 100644 --- a/pulsar-cli-utils/src/main/java/org/apache/pulsar/cli/converters/RelativeTimeUtil.java +++ b/pulsar-cli-utils/src/main/java/org/apache/pulsar/cli/converters/RelativeTimeUtil.java @@ -69,8 +69,7 @@ public static long parseRelativeTimeInSeconds(String relativeTime) { * @return seconds */ public static double nsToSeconds(long ns) { - double seconds = (double) ns / 1_000_000_000; - BigDecimal bd = new BigDecimal(seconds); + BigDecimal bd = BigDecimal.valueOf(ns, 9); return bd.setScale(3, RoundingMode.HALF_UP).doubleValue(); } } diff --git a/pulsar-cli-utils/src/test/java/org/apache/pulsar/cli/converters/TimeConversionTest.java b/pulsar-cli-utils/src/test/java/org/apache/pulsar/cli/converters/TimeConversionTest.java index 2091d2d5f3ae5..0b1b948276b7a 100644 --- a/pulsar-cli-utils/src/test/java/org/apache/pulsar/cli/converters/TimeConversionTest.java +++ b/pulsar-cli-utils/src/test/java/org/apache/pulsar/cli/converters/TimeConversionTest.java @@ -86,6 +86,7 @@ public void testFailingParsing() { public void testNsToSeconds() { assertEquals(RelativeTimeUtil.nsToSeconds(1_000_000_000), 1.000); assertEquals(RelativeTimeUtil.nsToSeconds(1_500_000_000), 1.500); + assertEquals(RelativeTimeUtil.nsToSeconds(1_234_500_000), 1.235); assertEquals(RelativeTimeUtil.nsToSeconds(1_555_555_555), 1.556); } } diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/RelativeTimeUtil.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/RelativeTimeUtil.java index 12dd6efd6c0b2..2b7e74a85ff36 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/RelativeTimeUtil.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/RelativeTimeUtil.java @@ -72,8 +72,7 @@ public static long parseRelativeTimeInSeconds(String relativeTime) { * @return seconds */ public static double nsToSeconds(long ns) { - double seconds = (double) ns / 1_000_000_000; - BigDecimal bd = new BigDecimal(seconds); + BigDecimal bd = BigDecimal.valueOf(ns, 9); return bd.setScale(3, RoundingMode.HALF_UP).doubleValue(); } } diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/util/RelativeTimeUtilTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/util/RelativeTimeUtilTest.java index f27c25726dad7..b1457cc789075 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/util/RelativeTimeUtilTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/util/RelativeTimeUtilTest.java @@ -58,4 +58,12 @@ public void testParseRelativeTime() { // expected } } + + @Test + public void testNsToSeconds() { + assertEquals(RelativeTimeUtil.nsToSeconds(1_000_000_000), 1.000); + assertEquals(RelativeTimeUtil.nsToSeconds(1_500_000_000), 1.500); + assertEquals(RelativeTimeUtil.nsToSeconds(1_234_500_000), 1.235); + assertEquals(RelativeTimeUtil.nsToSeconds(1_555_555_555), 1.556); + } }