70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package money
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
)
|
|
|
|
// Round 将金额四舍五入到角(0.1元),统一全项目金额精度
|
|
// 例如:12.34 -> 12.3, 12.36 -> 12.4, 12.35 -> 12.4
|
|
func Round(value float64) float64 {
|
|
return math.Round(value*10) / 10
|
|
}
|
|
|
|
// ToCent 将元转换为分(整数),用于存储。
|
|
// 12.34 元 -> 1234 分
|
|
func ToCent(yuan float64) int64 {
|
|
return int64(math.Round(yuan * 100))
|
|
}
|
|
|
|
// ToDisplayYuan 将分转换为按角精度展示的元值。
|
|
// 1234 分 -> 12.3 元
|
|
func ToDisplayYuan(cent int64) float64 {
|
|
return Round(float64(cent) / 100)
|
|
}
|
|
|
|
// Format 格式化分为字符串(角精度,保留1位小数)
|
|
// 1234 分 -> "12.3"
|
|
// 1230 分 -> "12.3"
|
|
func Format(cent int64) string {
|
|
return fmt.Sprintf("%.1f", ToDisplayYuan(cent))
|
|
}
|
|
|
|
// FormatWithSymbol 格式化分为带符号的字符串
|
|
// 123分 -> "¥12.3"
|
|
func FormatWithSymbol(cent int64) string {
|
|
return "¥" + Format(cent)
|
|
}
|
|
|
|
// Min 返回两个金额中较小的值(角精度,兼容旧代码)
|
|
func Min(a, b float64) float64 {
|
|
if a < b {
|
|
return Round(a)
|
|
}
|
|
return Round(b)
|
|
}
|
|
|
|
// Max 返回两个金额中较大的值(角精度,兼容旧代码)
|
|
func Max(a, b float64) float64 {
|
|
if a > b {
|
|
return Round(a)
|
|
}
|
|
return Round(b)
|
|
}
|
|
|
|
// MinCent 返回两个分值中较小的值
|
|
func MinCent(a, b int64) int64 {
|
|
if a < b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
// MaxCent 返回两个分值中较大的值
|
|
func MaxCent(a, b int64) int64 {
|
|
if a > b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|