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