1 Star 0 Fork 0

码布什/go工具库

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
FloatUtil.go 2.74 KB
一键复制 编辑 原始数据 按行查看 历史
zhengqiuyun 提交于 2024-11-14 17:03 . AddFloat64方法空指针BUG修复
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
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/manoshi/go-util.git
git@gitee.com:manoshi/go-util.git
manoshi
go-util
go工具库
v0.2.13

搜索帮助