diff --git a/msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackGenerator.java b/msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackGenerator.java index 988817a3..96aa6a06 100644 --- a/msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackGenerator.java +++ b/msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackGenerator.java @@ -270,7 +270,8 @@ private void packBigDecimal(BigDecimal decimal) if (failedToPackAsBI) { double doubleValue = decimal.doubleValue(); //Check to make sure this BigDecimal can be represented as a double - if (!decimal.stripTrailingZeros().toEngineeringString().equals(BigDecimal.valueOf(doubleValue).toEngineeringString())) { + if (!decimal.stripTrailingZeros().toEngineeringString().equals( + BigDecimal.valueOf(doubleValue).stripTrailingZeros().toEngineeringString())) { throw new IllegalArgumentException("MessagePack cannot serialize a BigDecimal that can't be represented as double. " + decimal); } messagePacker.packDouble(doubleValue); diff --git a/msgpack-jackson/src/test/java/org/msgpack/jackson/dataformat/MessagePackGeneratorTest.java b/msgpack-jackson/src/test/java/org/msgpack/jackson/dataformat/MessagePackGeneratorTest.java index 549f2f90..e2c202bc 100644 --- a/msgpack-jackson/src/test/java/org/msgpack/jackson/dataformat/MessagePackGeneratorTest.java +++ b/msgpack-jackson/src/test/java/org/msgpack/jackson/dataformat/MessagePackGeneratorTest.java @@ -304,10 +304,12 @@ public void testBigDecimal() double d0 = 1.23456789; double d1 = 1.23450000000000000000006789; String d2 = "12.30"; + String d3 = "0.00001"; List bigDecimals = Arrays.asList( BigDecimal.valueOf(d0), BigDecimal.valueOf(d1), new BigDecimal(d2), + new BigDecimal(d3), BigDecimal.valueOf(Double.MIN_VALUE), BigDecimal.valueOf(Double.MAX_VALUE), BigDecimal.valueOf(Double.MIN_NORMAL) @@ -320,6 +322,7 @@ public void testBigDecimal() assertEquals(d0, unpacker.unpackDouble(), 0.000000000000001); assertEquals(d1, unpacker.unpackDouble(), 0.000000000000001); assertEquals(Double.valueOf(d2), unpacker.unpackDouble(), 0.000000000000001); + assertEquals(Double.valueOf(d3), unpacker.unpackDouble(), 0.000000000000001); assertEquals(Double.MIN_VALUE, unpacker.unpackDouble(), 0.000000000000001); assertEquals(Double.MAX_VALUE, unpacker.unpackDouble(), 0.000000000000001); assertEquals(Double.MIN_NORMAL, unpacker.unpackDouble(), 0.000000000000001);