You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
godecimal/big_output.go

59 lines
1.1 KiB

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])
}