Comments (6)
I still get errors with these numbers:
data1:= []byte(`{"price": 5620.1400000000003}`)
data2:= []byte(`{"price": 0.00058273999999999999}`)
Consider using slice of float64 for pow10uint64 (var pow10float64 = [24]float64), so I could add bigger divider numbers. Or maybe consider using big.Int?
from gojay.
Hi,
Let me check these numbers and try to find a decent solution. I think the standard package rounds these numbers when parsing them, so I think if your intention is to be able to use these numbers with arbitrary precision the best would be to parse them into big.Float
from the math/big
package.
I'm experimenting to see what we can do, I'll come back to you.
from gojay.
So I've decided to truncate these numbers when parsing them. Will push an update later today to master and a new release soon.
from gojay.
I've run these benchmarks:
var bigf = []byte(`0.00058273999999999999`)
// BenchmarkBigFloatEncodingJSON decodes a big float with the standard package
func BenchmarkBigFloatEncodingJSON(b *testing.B) {
b.ReportAllocs()
for n := 0; n < b.N; n++ {
var f float64
var _ = json.Unmarshal(bigf, &f)
}
}
// BenchmarkBigFloatGojay decodes a big float with gojay
func BenchmarkBigFloatGojay(b *testing.B) {
b.ReportAllocs()
for n := 0; n < b.N; n++ {
var f float64
var _ = gojay.Unmarshal(bigf, &f)
}
}
And the results are the following:
--- encoding/json
goos: darwin
goarch: amd64
pkg: github.com/francoispqt/gojay/benchmarks/decoder
BenchmarkBigFloatEncodingJSON-8 2000000 627 ns/op 328 B/op 3 allocs/op
PASS
ok github.com/francoispqt/gojay/benchmarks/decoder 1.929s
Success: Benchmarks passed.
--- gojay
goos: darwin
goarch: amd64
pkg: github.com/francoispqt/gojay/benchmarks/decoder
BenchmarkBigFloatGojay-8 10000000 177 ns/op 8 B/op 1 allocs/op
PASS
ok github.com/francoispqt/gojay/benchmarks/decoder 1.989s
Success: Benchmarks passed.
from gojay.
Please check with the current master and close the issue. I will add decoding to big.Float
and big.Int
, you could already do it by first decoding to a gojay.EmbeddedJSON
which is basically a []byte
and then use big.ParseFloat
.
from gojay.
Not getting any answer so I'm closing. Just reopen if it is not fixed. Thanks!
from gojay.
Related Issues (20)
- Decoder returns misleading error at EOF
- gojay can't generator code for two package
- encoding ints to strings HOT 1
- Unmarshal modifies input data HOT 1
- wrong code generated with custom slice types
- Generator fails for map[string]interface{} field HOT 1
- TestMessage_Unmarshal and TestMessage_Marshal fail at test
- panic on example stream program
- NullBytes appearing in strings HOT 1
- Go test build fails under 32-bit systems
- Is the project dead? HOT 1
- Streaming reflective JSON encoder
- Decoder.{{Type}}Null does not behave as documented when encountering incorrect typed json elements.
- Return length of decoded input
- Return error on unknown object key
- gojay generated code doesn't work for type names starting with K
- Support naming helper Array types with correct plural (Currencies, not Currencys)
- Manually adding an error to an Encoder
- Stream encoding with gojay seems to be a problem. HOT 1
- Upgrade protobuf dependency to >= 1.3.2 to get rid of CVE-2021-3121 vulnerability
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gojay.