diff --git a/src/main/java/info/adams/ryu/RyuFloat.java b/src/main/java/info/adams/ryu/RyuFloat.java index c4b05cc9..43d134d7 100644 --- a/src/main/java/info/adams/ryu/RyuFloat.java +++ b/src/main/java/info/adams/ryu/RyuFloat.java @@ -204,7 +204,7 @@ public static String floatToString(float value, RoundingMode roundingMode) { } dpIsTrailingZeros = 1 >= q; - dvIsTrailingZeros = (q < FLOAT_MANTISSA_BITS) && (mv & ((1 << (q - 1)) - 1)) == 0; + dvIsTrailingZeros = (q < FLOAT_MANTISSA_BITS + 3) && (mv & ((1 << (q - 1)) - 1)) == 0; dmIsTrailingZeros = (mm % 2 == 1 ? 0 : 1) >= q; } if (DEBUG) { diff --git a/src/test/java/info/adams/ryu/FloatToStringTest.java b/src/test/java/info/adams/ryu/FloatToStringTest.java index 3925f72a..3ebc655a 100644 --- a/src/test/java/info/adams/ryu/FloatToStringTest.java +++ b/src/test/java/info/adams/ryu/FloatToStringTest.java @@ -76,6 +76,14 @@ public void roundingModeEven() { assertF2sEquals("3.436672E10", "3.4366718E10", 3.4366717E10f); } + @Test + public void lotsOfTrailingZeros() { + assertF2sEquals("2.4414062E-4", 2.4414062E-4f); + assertF2sEquals("0.0024414062", 2.4414062E-3f); + assertF2sEquals("0.0043945312", 4.3945312E-3f); + assertF2sEquals("0.0063476562", 6.3476562E-3f); + } + @Test public void roundingEvenIfTied() { assertF2sEquals("0.33007812", 0.33007812f);