diff --git a/gson/src/main/java/com/google/gson/internal/LazilyParsedNumber.java b/gson/src/main/java/com/google/gson/internal/LazilyParsedNumber.java index 42bbaa1b..3486fa10 100644 --- a/gson/src/main/java/com/google/gson/internal/LazilyParsedNumber.java +++ b/gson/src/main/java/com/google/gson/internal/LazilyParsedNumber.java @@ -39,7 +39,7 @@ public final class LazilyParsedNumber extends Number { try { return (int) Long.parseLong(value); } catch (NumberFormatException nfe) { - return new BigInteger(value).intValue(); + return new BigDecimal(value).intValue(); } } } @@ -49,7 +49,7 @@ public final class LazilyParsedNumber extends Number { try { return Long.parseLong(value); } catch (NumberFormatException e) { - return new BigInteger(value).longValue(); + return new BigDecimal(value).longValue(); } } diff --git a/gson/src/test/java/com/google/gson/functional/PrimitiveTest.java b/gson/src/test/java/com/google/gson/functional/PrimitiveTest.java index e6c3f9a3..372a30e6 100644 --- a/gson/src/test/java/com/google/gson/functional/PrimitiveTest.java +++ b/gson/src/test/java/com/google/gson/functional/PrimitiveTest.java @@ -152,6 +152,10 @@ public class PrimitiveTest extends TestCase { expected = new Long(json); actual = gson.fromJson(json, Number.class); assertEquals(expected.longValue(), actual.longValue()); + + json = "1.0"; + actual = gson.fromJson(json, Number.class); + assertEquals(1L, actual.longValue()); } public void testPrimitiveDoubleAutoboxedSerialization() {