diff --git a/stream_float.go b/stream_float.go index 826aa59..eddd831 100644 --- a/stream_float.go +++ b/stream_float.go @@ -27,6 +27,14 @@ func (stream *Stream) WriteFloat32(val float32) { } } stream.buf = strconv.AppendFloat(stream.buf, float64(val), fmt, -1, 32) + if fmt == 'e' { + // clean up e-09 to e-9 + n := len(stream.buf) + if n >= 4 && stream.buf[n-4] == 'e' && stream.buf[n-3] == '-' && stream.buf[n-2] == '0' { + stream.buf[n-2] = stream.buf[n-1] + stream.buf = stream.buf[:n-1] + } + } } // WriteFloat32Lossy write float32 to stream with ONLY 6 digits precision although much much faster @@ -76,6 +84,14 @@ func (stream *Stream) WriteFloat64(val float64) { } } stream.buf = strconv.AppendFloat(stream.buf, float64(val), fmt, -1, 64) + if fmt == 'e' { + // clean up e-09 to e-9 + n := len(stream.buf) + if n >= 4 && stream.buf[n-4] == 'e' && stream.buf[n-3] == '-' && stream.buf[n-2] == '0' { + stream.buf[n-2] = stream.buf[n-1] + stream.buf = stream.buf[:n-1] + } + } } // WriteFloat64Lossy write float64 to stream with ONLY 6 digits precision although much much faster diff --git a/value_tests/float_test.go b/value_tests/float_test.go index 3c00b26..1f2c007 100644 --- a/value_tests/float_test.go +++ b/value_tests/float_test.go @@ -4,10 +4,11 @@ import ( "bytes" "encoding/json" "fmt" - "github.com/json-iterator/go" - "github.com/stretchr/testify/require" "strconv" "testing" + + jsoniter "github.com/json-iterator/go" + "github.com/stretchr/testify/require" ) func Test_read_float(t *testing.T) { @@ -88,7 +89,7 @@ func Test_write_float32(t *testing.T) { stream = jsoniter.NewStream(jsoniter.ConfigDefault, nil, 0) stream.WriteFloat32(float32(0.0000001)) - should.Equal("1e-07", string(stream.Buffer())) + should.Equal("1e-7", string(stream.Buffer())) } func Test_write_float64(t *testing.T) { @@ -125,5 +126,5 @@ func Test_write_float64(t *testing.T) { stream = jsoniter.NewStream(jsoniter.ConfigDefault, nil, 0) stream.WriteFloat64(float64(0.0000001)) - should.Equal("1e-07", string(stream.Buffer())) + should.Equal("1e-7", string(stream.Buffer())) }