--- old/src/share/classes/java/math/BigDecimal.java 2013-07-09 12:49:30.000000000 -0700 +++ new/src/share/classes/java/math/BigDecimal.java 2013-07-09 12:49:30.000000000 -0700 @@ -2592,14 +2592,18 @@ * the {@code BigDecimal} value {@code 600.0}, which has * [{@code BigInteger}, {@code scale}] components equals to * [6000, 1], yields {@code 6E2} with [{@code BigInteger}, - * {@code scale}] components equals to [6, -2] + * {@code scale}] components equals to [6, -2]. If + * this BigDecimal is numerically equal to zero, then + * {@code BigDecimal.ZERO} is returned. * * @return a numerically equal {@code BigDecimal} with any * trailing zeros removed. * @since 1.5 */ public BigDecimal stripTrailingZeros() { - if(intCompact!=INFLATED) { + if (intCompact == 0 || (intVal != null && intVal.signum() == 0)) { + return BigDecimal.ZERO; + } else if (intCompact != INFLATED) { return createAndStripZerosToMatchScale(intCompact, scale, Long.MIN_VALUE); } else { return createAndStripZerosToMatchScale(intVal, scale, Long.MIN_VALUE); --- old/test/java/math/BigDecimal/StrippingZerosTest.java 2013-07-09 12:49:32.000000000 -0700 +++ new/test/java/math/BigDecimal/StrippingZerosTest.java 2013-07-09 12:49:32.000000000 -0700 @@ -45,8 +45,17 @@ {new BigDecimal("1234.56780"), new BigDecimal("1234.5678")}, {new BigDecimal("1234.567800000"), new BigDecimal("1234.5678")}, {new BigDecimal("0"), new BigDecimal("0")}, - {new BigDecimal("0e100"), new BigDecimal("0e100")}, - {new BigDecimal("0e-100"), new BigDecimal("0e-100")}, + {new BigDecimal("0e2"), BigDecimal.ZERO}, + {new BigDecimal("0e-2"), BigDecimal.ZERO}, + {new BigDecimal("0e42"), BigDecimal.ZERO}, + {new BigDecimal("+0e42"), BigDecimal.ZERO}, + {new BigDecimal("-0e42"), BigDecimal.ZERO}, + {new BigDecimal("0e-42"), BigDecimal.ZERO}, + {new BigDecimal("+0e-42"), BigDecimal.ZERO}, + {new BigDecimal("-0e-42"), BigDecimal.ZERO}, + {new BigDecimal("0e-2"), BigDecimal.ZERO}, + {new BigDecimal("0e100"), BigDecimal.ZERO}, + {new BigDecimal("0e-100"), BigDecimal.ZERO}, {new BigDecimal("10"), new BigDecimal("1e1")}, {new BigDecimal("20"), new BigDecimal("2e1")}, {new BigDecimal("100"), new BigDecimal("1e2")},