1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-23 13:52:26 +08:00

fix: fix bug of Comma, issue #248

This commit is contained in:
dudaodong
2024-09-29 11:52:01 +08:00
parent 2145808268
commit 1d3585b22f
4 changed files with 19 additions and 6 deletions

View File

@@ -42,7 +42,7 @@ Param should be number or numberic string.</p>
<b>Signature:</b> <b>Signature:</b>
```go ```go
func Comma(value interface{}, symbol string) string func Comma(value interface{}, prefixSymbol string) string
``` ```
<b>Example:</b> <b>Example:</b>

View File

@@ -41,7 +41,7 @@ import (
<b>函数签名:</b> <b>函数签名:</b>
```go ```go
func Comma(v interface{}, symbol string) string func Comma(v interface{}, prefixSymbol string) string
``` ```
<b>例子:</b> <b>例子:</b>

View File

@@ -16,10 +16,10 @@ import (
"github.com/duke-git/lancet/convertor" "github.com/duke-git/lancet/convertor"
) )
// Comma add comma to a number value by every 3 numbers from right. ahead by symbol char. // Comma add comma to a number value by every 3 numbers from right. ahead by prefix symbol char.
// if value is invalid number string eg "aa", return empty string // if value is invalid number string eg "aa", return empty string
// Comma("12345", "$") => "$12,345", Comma(12345, "$") => "$12,345" // Comma("12345", "$") => "$12,345", Comma(12345, "$") => "$12,345"
func Comma(value interface{}, symbol string) string { func Comma(value interface{}, prefixSymbol string) string {
numString := convertor.ToString(value) numString := convertor.ToString(value)
_, err := strconv.ParseFloat(numString, 64) _, err := strconv.ParseFloat(numString, 64)
@@ -27,17 +27,26 @@ func Comma(value interface{}, symbol string) string {
return "" return ""
} }
isNegative := strings.HasPrefix(numString, "-")
if isNegative {
numString = numString[1:]
}
index := strings.Index(numString, ".") index := strings.Index(numString, ".")
if index == -1 { if index == -1 {
index = len(numString) index = len(numString)
} }
for index > 3 { for index > 3 {
index = index - 3 index -= 3
numString = numString[:index] + "," + numString[index:] numString = numString[:index] + "," + numString[index:]
} }
return symbol + numString if isNegative {
numString = "-" + numString
}
return prefixSymbol + numString
} }
// Pretty data to JSON string. // Pretty data to JSON string.

View File

@@ -26,6 +26,10 @@ func TestComma(t *testing.T) {
assert.Equal("12,345.6789", Comma(+12345.6789, "")) assert.Equal("12,345.6789", Comma(+12345.6789, ""))
assert.Equal("12,345,678.9", Comma(12345678.9, "")) assert.Equal("12,345,678.9", Comma(12345678.9, ""))
assert.Equal("123,456,789,000", Comma(123456789000, "")) assert.Equal("123,456,789,000", Comma(123456789000, ""))
assert.Equal("-999", Comma(-999, ""))
assert.Equal("-1,000", Comma(-1000, ""))
assert.Equal("-1,234,567", Comma(-1234567, ""))
} }
func TestPretty(t *testing.T) { func TestPretty(t *testing.T) {