39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
package coryCommon
|
||
|
||
import (
|
||
"errors"
|
||
"math/big"
|
||
)
|
||
|
||
// PercentageFunc 百分比计算(精度很高:比如说总数100,完成100,最终得到结果为99.99999999%,那么会直接操作成100)
|
||
// precision:设置精度
|
||
// total:总数据量
|
||
// finish:完成度
|
||
func PercentageFunc(precision uint, total, finish float64) (consequence float64, err error) {
|
||
if total == 0 {
|
||
err = errors.New("总数据不能为初始值")
|
||
return 0, err
|
||
}
|
||
if precision == 0 {
|
||
err = errors.New("精度不能为初始值")
|
||
return 0, err
|
||
}
|
||
consequence = 0
|
||
// 定义大浮点数
|
||
numerator := big.NewFloat(100)
|
||
denominator := big.NewFloat(total)
|
||
result := big.NewFloat(finish)
|
||
// 设置精度
|
||
//var precision uint = 100 // 设置为你需要的精度
|
||
numerator.SetPrec(precision)
|
||
denominator.SetPrec(precision)
|
||
result.SetPrec(precision)
|
||
// 计算结果
|
||
result.Quo(result, denominator)
|
||
result.Mul(result, numerator)
|
||
// 截取到两位小数
|
||
resultRounded, _ := result.Float64()
|
||
consequence = float64(int(resultRounded*100)) / 100 // 保留两位小数
|
||
return
|
||
}
|