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.
59 lines
1.1 KiB
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])
|
|
}
|