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])
}
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 {