From 41d47bb1629660c45c73745c26c7d7d00360833f Mon Sep 17 00:00:00 2001 From: jiangyong Date: Sat, 6 Sep 2025 00:56:03 +0800 Subject: [PATCH] formatnumber --- util.go | 53 +++++++++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/util.go b/util.go index 6170706..50d8cc6 100644 --- a/util.go +++ b/util.go @@ -51,43 +51,40 @@ func FormatBytes(bytes int64) string { return fmt.Sprintf("%.2f%cB", float64(bytes)/float64(div), "KMGTPE"[exp]) } -func FormatInteger(num int) string { - if num == 0 { - return "0" - } - - negative := false +// FormatNumber 格式化整数为千分位显示,支持正负数 +func FormatNumber(num int64) string { + // 处理符号 + sign := "" if num < 0 { - negative = true + sign = "-" num = -num } - str := strconv.Itoa(num) - var result strings.Builder - + // 转换为字符串处理 + str := fmt.Sprintf("%d", num) length := len(str) - remainder := length % 3 - if remainder == 0 { - remainder = 3 + + // 小于等于3位直接返回 + if length <= 3 { + return sign + str } - for i, char := range str { - if i == 0 { - result.WriteRune(char) - if remainder == 1 && length > 1 { - result.WriteString(",") - } - continue - } - if (i-remainder+1)%3 == 0 { - result.WriteString(",") - } - result.WriteRune(char) + // 计算第一个逗号位置 + firstComma := length % 3 + if firstComma == 0 { + firstComma = 3 } - if negative { - return "-" + result.String() + + // 构建格式化字符串 + var builder strings.Builder + builder.WriteString(str[:firstComma]) + + for i := firstComma; i < length; i += 3 { + builder.WriteString(",") + builder.WriteString(str[i : i+3]) } - return result.String() + + return sign + builder.String() } func If[T any](condition bool, trueVal, falseVal T) T {