package godecimal import ( "fmt" "math/big" "strings" ) // String 输出 string func (d Decimal) String() string { return d.floatValue.String() } // Float64 输出 float64 func (d Decimal) Float64() float64 { rat, _ := new(big.Rat).SetString(d.String()) f, _ := rat.Float64() return f } // MoneyFloat64 货币 float64 func (d Decimal) MoneyFloat64() float64 { rat, _ := new(big.Rat).SetString(d.floatValue.Text('f', 2)) f, _ := rat.Float64() return f } // Float64Point 输出float64带小数点 func (d Decimal) Float64Point(p int) float64 { rat, _ := new(big.Rat).SetString(d.floatValue.Text('f', p)) f, _ := rat.Float64() return f } // Float64PointAdaptive 输出float64带小数点(自适应) func (d Decimal) Float64PointAdaptive(maxP int) float64 { f, _ := d.floatValue.Float64() if maxP > 0 { pointLength := d.pointLength(f) if pointLength > maxP { rat, _ := new(big.Rat).SetString(d.floatValue.Text('f', maxP)) f2, _ := rat.Float64() return f2 } else { return f } } else { return f } } func (Decimal) pointLength(a any) int { tmp := strings.Split(fmt.Sprint(a), ".") if len(tmp) <= 1 { return 0 } return len(tmp[1]) }