Skip to content

Commit dbf0f7c

Browse files
authored
try to avoid precision loss (#983)
1 parent d0a998c commit dbf0f7c

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

src/main/java/com/fasterxml/jackson/core/JsonGenerator.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2491,13 +2491,13 @@ public void copyCurrentEvent(JsonParser p) throws IOException
24912491
}
24922492
case ID_NUMBER_FLOAT:
24932493
{
2494-
NumberType n = p.getNumberType();
2495-
if (n == NumberType.BIG_DECIMAL) {
2496-
writeNumber(p.getDecimalValue());
2497-
} else if (n == NumberType.FLOAT) {
2498-
writeNumber(p.getFloatValue());
2494+
Number n = p.getNumberValueExact();
2495+
if (n instanceof Float) {
2496+
writeNumber((Float) n);
2497+
} else if (n instanceof BigDecimal) {
2498+
writeNumber((BigDecimal) n);
24992499
} else {
2500-
writeNumber(p.getDoubleValue());
2500+
writeNumber(n.doubleValue());
25012501
}
25022502
break;
25032503
}
@@ -2636,13 +2636,13 @@ protected void _copyCurrentContents(JsonParser p) throws IOException
26362636
}
26372637
case ID_NUMBER_FLOAT:
26382638
{
2639-
NumberType n = p.getNumberType();
2640-
if (n == NumberType.BIG_DECIMAL) {
2641-
writeNumber(p.getDecimalValue());
2642-
} else if (n == NumberType.FLOAT) {
2643-
writeNumber(p.getFloatValue());
2639+
Number n = p.getNumberValueExact();
2640+
if (n instanceof Float) {
2641+
writeNumber((Float) n);
2642+
} else if (n instanceof BigDecimal) {
2643+
writeNumber((BigDecimal) n);
26442644
} else {
2645-
writeNumber(p.getDoubleValue());
2645+
writeNumber(n.doubleValue());
26462646
}
26472647
break;
26482648
}

0 commit comments

Comments
 (0)