From d1369eb5c6eadeb1baeca52d4c11e80d4343166d Mon Sep 17 00:00:00 2001 From: Martial BE Date: Mon, 22 Apr 2024 18:32:20 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix:=20fix=20floating=20point=20?= =?UTF-8?q?precision?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 1 + go.sum | 2 ++ model/price.go | 11 +++++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 57d6cd1a..acf61592 100644 --- a/go.mod +++ b/go.mod @@ -40,6 +40,7 @@ require ( github.com/robfig/cron/v3 v3.0.1 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/shopspring/decimal v1.4.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect diff --git a/go.sum b/go.sum index bfa82581..13cc81c1 100644 --- a/go.sum +++ b/go.sum @@ -232,6 +232,8 @@ github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6ke github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= diff --git a/model/price.go b/model/price.go index f0cf1582..923005f4 100644 --- a/model/price.go +++ b/model/price.go @@ -3,6 +3,7 @@ package model import ( "one-api/common" + "github.com/shopspring/decimal" "gorm.io/gorm" ) @@ -62,11 +63,17 @@ func (price *Price) GetOutput() float64 { } func (price *Price) FetchInputCurrencyPrice(rate float64) float64 { - return price.GetInput() * rate + r := decimal.NewFromFloat(price.GetInput()).Mul(decimal.NewFromFloat(rate)) + v, _ := r.Float64() + + return v } func (price *Price) FetchOutputCurrencyPrice(rate float64) float64 { - return price.GetOutput() * rate + r := decimal.NewFromFloat(price.GetOutput()).Mul(decimal.NewFromFloat(rate)) + v, _ := r.Float64() + + return v } func UpdatePrices(tx *gorm.DB, models []string, prices *Price) error {