formatnumber

This commit is contained in:
jiangyong 2025-09-06 00:56:03 +08:00
parent 0238b0512f
commit 41d47bb162
1 changed files with 25 additions and 28 deletions

53
util.go
View File

@ -51,43 +51,40 @@ func FormatBytes(bytes int64) string {
return fmt.Sprintf("%.2f%cB", float64(bytes)/float64(div), "KMGTPE"[exp]) return fmt.Sprintf("%.2f%cB", float64(bytes)/float64(div), "KMGTPE"[exp])
} }
func FormatInteger(num int) string { // FormatNumber 格式化整数为千分位显示,支持正负数
if num == 0 { func FormatNumber(num int64) string {
return "0" // 处理符号
} sign := ""
negative := false
if num < 0 { if num < 0 {
negative = true sign = "-"
num = -num num = -num
} }
str := strconv.Itoa(num) // 转换为字符串处理
var result strings.Builder str := fmt.Sprintf("%d", num)
length := len(str) length := len(str)
remainder := length % 3
if remainder == 0 { // 小于等于3位直接返回
remainder = 3 if length <= 3 {
return sign + str
} }
for i, char := range str { // 计算第一个逗号位置
if i == 0 { firstComma := length % 3
result.WriteRune(char) if firstComma == 0 {
if remainder == 1 && length > 1 { firstComma = 3
result.WriteString(",")
} }
continue
// 构建格式化字符串
var builder strings.Builder
builder.WriteString(str[:firstComma])
for i := firstComma; i < length; i += 3 {
builder.WriteString(",")
builder.WriteString(str[i : i+3])
} }
if (i-remainder+1)%3 == 0 {
result.WriteString(",") return sign + builder.String()
}
result.WriteRune(char)
}
if negative {
return "-" + result.String()
}
return result.String()
} }
func If[T any](condition bool, trueVal, falseVal T) T { func If[T any](condition bool, trueVal, falseVal T) T {