Money工具包:实现分↔角转换和格式化函数
核心函数: - ToCent(jiao) -> cent:将角转换为分(存储) - ToJiao(cent) -> jiao:将分转换为角(展示) - Format(cent) -> string:格式化分为角字符串 - FormatWithSymbol(cent) -> string:格式化为带¥符号的字符串 兼容性: - 保留 Min/Max(float64) 用于兼容旧代码 - 新增 MinCent/MaxCent(int64) 用于分计算 测试覆盖: - 双向转换精度测试 - 边界值测试 - 格式化输出测试 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+42
-11
@@ -11,7 +11,35 @@ func Round(value float64) float64 {
|
||||
return math.Round(value*10) / 10
|
||||
}
|
||||
|
||||
// Min 返回两个金额中较小的值(角精度)
|
||||
// ToCent 将角转换为分(整数),用于存储
|
||||
// 12.3角 -> 123分
|
||||
// 12.34角 -> 123分(自动舍入到角)
|
||||
func ToCent(jiao float64) int64 {
|
||||
return int64(math.Round(jiao * 10))
|
||||
}
|
||||
|
||||
// ToJiao 将分转换为角(0.1元精度),用于API响应
|
||||
// 123分 -> 12.3角
|
||||
// 1234分 -> 123.4角
|
||||
func ToJiao(cent int64) float64 {
|
||||
return float64(cent) / 10.0
|
||||
}
|
||||
|
||||
// Format 格式化分为字符串(角精度,保留1位小数)
|
||||
// 123分 -> "12.3"
|
||||
// 1230分 -> "123.0"
|
||||
func Format(cent int64) string {
|
||||
jiao := ToJiao(cent)
|
||||
return fmt.Sprintf("%.1f", jiao)
|
||||
}
|
||||
|
||||
// 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)
|
||||
@@ -19,7 +47,7 @@ func Min(a, b float64) float64 {
|
||||
return Round(b)
|
||||
}
|
||||
|
||||
// Max 返回两个金额中较大的值(角精度)
|
||||
// Max 返回两个金额中较大的值(角精度,兼容旧代码)
|
||||
func Max(a, b float64) float64 {
|
||||
if a > b {
|
||||
return Round(a)
|
||||
@@ -27,15 +55,18 @@ func Max(a, b float64) float64 {
|
||||
return Round(b)
|
||||
}
|
||||
|
||||
// Format 格式化金额为字符串(保留1位小数)
|
||||
// 例如:12.3 -> "12.3", 12.0 -> "12.0"
|
||||
func Format(value float64) string {
|
||||
rounded := Round(value)
|
||||
return fmt.Sprintf("%.1f", rounded)
|
||||
// MinCent 返回两个分值中较小的值
|
||||
func MinCent(a, b int64) int64 {
|
||||
if a < b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
// FormatWithSymbol 格式化金额并添加货币符号
|
||||
// 例如:12.3 -> "¥12.3"
|
||||
func FormatWithSymbol(value float64) string {
|
||||
return "¥" + Format(value)
|
||||
// MaxCent 返回两个分值中较大的值
|
||||
func MaxCent(a, b int64) int64 {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user