代码拉取完成,页面将自动刷新
package util
import (
"fmt"
"github.com/shopspring/decimal"
"math"
"strconv"
)
//FormatFloat64 将多余的浮点格式化
func FormatFloat64(f float64) string {
return strconv.FormatFloat(f, 'f', -1, 64)
}
//FormatFloat32 将多余的浮点格式化
func FormatFloat32(f float32) string {
return strconv.FormatFloat(float64(f), 'f', -1, 32)
}
// AddFloat64 精度加法 a+b
func AddFloat64(a *float64, b *float64) *float64 {
if a == nil {
return b
}
if b == nil {
return a
}
r, _ := decimal.NewFromFloat(*a).Add(decimal.NewFromFloat(*b)).Float64()
return &r
}
// AddFloat64Au 精度加法 a+b+c+....
func AddFloat64Au(a ...*float64) *float64 {
var r *float64
for i, f := range a {
if i == 0 {
r = f
} else {
r = AddFloat64(r, f)
}
}
return r
}
// SubtractFloat64 精度减法 a-b
func SubtractFloat64(a *float64, b *float64) *float64 {
if b == nil {
return a
}
if a == nil {
r, _ := decimal.NewFromFloat(-1).Mul(decimal.NewFromFloat(*b)).Float64()
return &r
}
r, _ := decimal.NewFromFloat(*a).Sub(decimal.NewFromFloat(*b)).Float64()
return &r
}
// SubtractFloat64Au 精度减法 a-b-c-....
func SubtractFloat64Au(a ...*float64) *float64 {
var r *float64
for i, f := range a {
if i == 0 {
r = f
} else {
r = SubtractFloat64(r, f)
}
}
return r
}
// MultiplyFloat64 精度乘法 a*b
func MultiplyFloat64(a *float64, b *float64) *float64 {
if a == nil || b == nil {
return nil
}
r, _ := decimal.NewFromFloat(*a).Mul(decimal.NewFromFloat(*b)).Float64()
return &r
}
// MultiplyFloat64Au 精度乘法 a*b*c*....
func MultiplyFloat64Au(a ...*float64) *float64 {
var r *float64
for i, f := range a {
if i == 0 {
r = f
} else {
r = MultiplyFloat64(r, f)
}
}
return r
}
// DivideFloat64 精度除法 a/b
func DivideFloat64(a *float64, b *float64) *float64 {
if a == nil || b == nil {
return nil
}
r, _ := decimal.NewFromFloat(*a).Div(decimal.NewFromFloat(*b)).Float64()
return &r
}
// DivideFloat64Au 精度除法 a/b/c/....
func DivideFloat64Au(a ...*float64) *float64 {
var r *float64
for i, f := range a {
if i == 0 {
r = f
} else {
r = DivideFloat64(r, f)
}
}
return r
}
// YuanToFen 元转分
func YuanToFen(t float64) int64 {
value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", *MultiplyFloat64(&t, Addr(float64(100)))), 64)
return int64(value + 0.5)
}
// FenToYuan 分转元
func FenToYuan(t int64) float64 {
value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", *DivideFloat64(Addr(float64(t)), Addr(float64(100)))), 64)
return value
}
// RoundOff 四舍五入,t为小数点位数
func RoundOff(f *float64, t int) *float64 {
a := math.Pow10(t)
b := *f
d := math.Round(a*b) / a
ff := "%." + strconv.Itoa(t) + "f"
value, _ := strconv.ParseFloat(fmt.Sprintf(ff, d), 64)
return &value
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。