精确计算
decimal
package main
import (
"fmt"
"github.com/prometheus/common/log"
"github.com/shopspring/decimal"
)
func imprecise() {
a := 2.07
b := 1.0
c := a - b
fmt.Printf("c=%v\n", c)
}
func main() {
a := "2.07"
b := "1.0"
ad, err := decimal.NewFromString(a)
if err != nil {
log.Error(err)
}
bd, err := decimal.NewFromString(b)
if err != nil {
log.Error(err)
}
cd := ad.Sub(bd)
c, _ := cd.Float64()
fmt.Printf("c=%v\n", c)
}
官方包
func Pct(x, y float64) float64 {
xb := big.NewFloat(x)
yb := big.NewFloat(y)
pct := big.NewFloat(100)
res, _ := xb.Mul(xb.Quo(xb, yb), pct).Float64()
res = math.Trunc(res*1e2) * 1e-2
return res
}
func main() {
price := big.NewRat(48, 1)
total := big.NewRat(95, 1)
pct := big.NewRat(100, 1)
tf, _ := total.Mul(total.Quo(price, total), pct).Float64()
t := math.Trunc(tf*1e2) * 1e-2
fmt.Println(t)
fmt.Println(Pct(3,78))
}