最近的 BTC 计算需要精确到小数位数后8位,翻了自己以前实现的小数位数截断,均不理想,后来看了 TiDB 的,感觉很适用,就用它了,下面是一些精确计算的结果
package main import ( "fmt" "github.com/pingcap/tidb/util/types" ) func main() { dec1 := new(types.MyDecimal) dec1.FromFloat64(3134333.22939932) dec2 := new(types.MyDecimal) dec2.FromFloat64(3134.229322) dec3 := new(types.MyDecimal) dec4 := new(types.MyDecimal) types.DecimalMul(dec1, dec2, dec3) fmt.Println(string(dec3.ToString())) ff, err := dec3.ToFloat64() if err != nil { panic(err) } fmt.Printf("%.8f\n", ff) for i := -8; i < 16; i++ { dec3.Round(dec4, i, types.ModeTruncate) fmt.Println(string(dec4.ToString())) } }
目前尚无回复