formatnumber
This commit is contained in:
parent
0238b0512f
commit
41d47bb162
53
util.go
53
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 {
|
||||
|
|
Loading…
Reference in New Issue