2025-12-13 17:44:18 +08:00
|
|
|
|
package lzUtils
|
|
|
|
|
|
|
2026-05-13 14:43:10 +08:00
|
|
|
|
import (
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
"math"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// RoundMoney 将金额四舍五入到指定小数位数(默认2位)
|
|
|
|
|
|
// 所有金额计算结果都应通过此函数处理,避免浮点精度问题
|
|
|
|
|
|
func RoundMoney(v float64, precision ...int) float64 {
|
|
|
|
|
|
p := 2
|
|
|
|
|
|
if len(precision) > 0 {
|
|
|
|
|
|
p = precision[0]
|
|
|
|
|
|
}
|
|
|
|
|
|
factor := math.Pow10(p)
|
|
|
|
|
|
return math.Round(v*factor) / factor
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// RoundMoney2 将金额四舍五入到2位小数并返回字符串
|
|
|
|
|
|
// 用于需要字符串格式的场景(如 API 返回、日志打印)
|
|
|
|
|
|
func RoundMoney2(v float64) string {
|
|
|
|
|
|
return fmt.Sprintf("%.2f", RoundMoney(v))
|
|
|
|
|
|
}
|
2025-12-13 17:44:18 +08:00
|
|
|
|
|
|
|
|
|
|
// ToWechatAmount 将金额从元转换为微信支付 SDK 需要的分(int64 类型)
|
|
|
|
|
|
func ToWechatAmount(amount float64) int64 {
|
2026-05-13 14:43:10 +08:00
|
|
|
|
return int64(RoundMoney(amount)*100 + 0.5)
|
2025-12-13 17:44:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ToAlipayAmount 将金额从元转换为支付宝支付 SDK 需要的字符串格式,保留两位小数
|
|
|
|
|
|
func ToAlipayAmount(amount float64) string {
|
2026-05-13 14:43:10 +08:00
|
|
|
|
return RoundMoney2(amount)
|
2025-12-13 17:44:18 +08:00
|
|
|
|
}
|