优化数字格式化

This commit is contained in:
刘祥超
2022-10-16 09:36:36 +08:00
parent 400f764b74
commit 0789a9ecc8
2 changed files with 28 additions and 18 deletions

View File

@@ -87,28 +87,14 @@ func FormatFloat(f interface{}, decimal int) string {
var dotIndex = strings.Index(s, ".") var dotIndex = strings.Index(s, ".")
if dotIndex > 0 { if dotIndex > 0 {
var d = s[:dotIndex] var d = s[:dotIndex]
var l = len(d) var f2 = s[dotIndex:]
if l > 3 { f2 = strings.TrimRight(strings.TrimRight(f2, "0"), ".")
var f2 = s[dotIndex:] // 包含点(. return formatDigit(d) + f2
var pieces = l / 3
var commIndex = l - pieces*3
var d2 = ""
if commIndex > 0 {
d2 = d[:commIndex] + ", "
}
for i := 0; i < pieces; i++ {
d2 += d[commIndex + i*3 : commIndex + i*3+3]
if i != pieces-1 {
d2 += ", "
}
}
return d2 + f2
}
} }
return s return s
case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64: case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
return types.String(x) return formatDigit(types.String(x))
case string: case string:
return x return x
} }
@@ -129,3 +115,23 @@ func TrimZeroSuffix(s string) string {
} }
return strings.TrimRight(strings.TrimRight(matches[1], "0"), ".") + matches[2] return strings.TrimRight(strings.TrimRight(matches[1], "0"), ".") + matches[2]
} }
func formatDigit(d string) string {
var l = len(d)
if l > 3 {
var pieces = l / 3
var commIndex = l - pieces*3
var d2 = ""
if commIndex > 0 {
d2 = d[:commIndex] + ", "
}
for i := 0; i < pieces; i++ {
d2 += d[commIndex+i*3 : commIndex+i*3+3]
if i != pieces-1 {
d2 += ", "
}
}
return d2
}
return d
}

View File

@@ -41,6 +41,10 @@ func TestFormatFloat(t *testing.T) {
t.Log(numberutils.FormatFloat(12345678.012, 2)) t.Log(numberutils.FormatFloat(12345678.012, 2))
t.Log(numberutils.FormatFloat(123456789.012, 2)) t.Log(numberutils.FormatFloat(123456789.012, 2))
t.Log(numberutils.FormatFloat(1234567890.012, 2)) t.Log(numberutils.FormatFloat(1234567890.012, 2))
t.Log(numberutils.FormatFloat(123, 2))
t.Log(numberutils.FormatFloat(1234, 2))
t.Log(numberutils.FormatFloat(1234.00001, 4))
t.Log(numberutils.FormatFloat(1234.56700, 4))
} }
func TestTrimZeroSuffix(t *testing.T) { func TestTrimZeroSuffix(t *testing.T) {