diff --git a/tools/any2any.go b/tools/any2any.go index 9f0de29..38d770c 100644 --- a/tools/any2any.go +++ b/tools/any2any.go @@ -735,7 +735,11 @@ func Float64tostring(f float64) string { if f == math.Trunc(f) { return strconv.FormatInt(int64(f), 10) } - return strconv.FormatFloat(f, 'f', 6, 64) + // 用 15 位精度,然后用 TrimRight 去零 + s := strconv.FormatFloat(f, 'f', 15, 64) + s = strings.TrimRight(s, "0") + s = strings.TrimRight(s, ".") + return s } // StrToFloat64 字符串转 float 64 diff --git a/tools/array.go b/tools/array.go index f3a8f46..6c52316 100644 --- a/tools/array.go +++ b/tools/array.go @@ -466,3 +466,14 @@ func MapKeys[K comparable, V any](m map[K]V) []K { } return keys } + +func Pluck[T any, R any](slice []T, extractor func(T) R) []R { + if len(slice) == 0 { + return []R{} // 返回空切片而非 nil,避免 nil 检查 + } + result := make([]R, len(slice)) + for i, item := range slice { + result[i] = extractor(item) + } + return result +}