diff --git a/decode_number_float.go b/decode_number_float.go index f76c586..d99d9e0 100644 --- a/decode_number_float.go +++ b/decode_number_float.go @@ -115,12 +115,20 @@ func (dec *Decoder) getFloat() (float64, error) { end = j continue case '.': + realEnd := dec.length - 1 + for i := realEnd; i >= start; i-- { + if dec.data[i] == '0' { + realEnd = i + } else { + break + } + } // we get part before decimal as integer beforeDecimal := dec.atoi64(start, end) // then we get part after decimal as integer start = j + 1 // get number after the decimal point - for i := j + 1; i < dec.length || dec.read(); i++ { + for i := j + 1; i <= realEnd || dec.read(); i++ { c := dec.data[i] if isDigit(c) { end = i diff --git a/decode_number_float_test.go b/decode_number_float_test.go index 94deaff..daca0d9 100644 --- a/decode_number_float_test.go +++ b/decode_number_float_test.go @@ -19,6 +19,11 @@ func TestDecoderFloat64(t *testing.T) { err bool errType interface{} }{ + { + name: "basic-float10", + json: "10.0000000000000000000", + expectedResult: 10, + }, { name: "basic-float", json: "1.1",