Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
read double value by BigDecimal
  • Loading branch information
t-mangoe committed Apr 13, 2019
commit ec7bb60c459efa1f6e3195c7efbf19dea17683fd
12 changes: 8 additions & 4 deletions src/main/java/com/jsoniter/IterImpl.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.jsoniter;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;

import com.jsoniter.any.Any;
import com.jsoniter.spi.JsonException;
import com.jsoniter.spi.Slice;

import java.io.IOException;
import java.math.BigInteger;

class IterImpl {

private static BigInteger maxLong = BigInteger.valueOf(Long.MAX_VALUE);
Expand Down Expand Up @@ -469,7 +470,10 @@ static final double readDouble(final JsonIterator iter) throws IOException {
decimalPart = -decimalPart;
int decimalPlaces = iter.head - start;
if (decimalPlaces > 0 && decimalPlaces < IterImplNumber.POW10.length && (iter.head - oldHead) < 10) {
return value + (decimalPart / (double) IterImplNumber.POW10[decimalPlaces]);
BigDecimal integerPart = new BigDecimal(value);
BigDecimal fractionalPart = new BigDecimal((decimalPart / (double) IterImplNumber.POW10[decimalPlaces]));
BigDecimal result = integerPart.add(fractionalPart).setScale(decimalPlaces,BigDecimal.ROUND_HALF_UP);
return result.doubleValue();
} else {
iter.head = oldHead;
return IterImplForStreaming.readDoubleSlowPath(iter);
Expand Down