在Go項目中開發(fā)中盡量不要使用fmt.Sprintf將其它格式轉(zhuǎn)換為String
使用fmt.Sprintf時需要注意如果使用%v, %+v, 超過100W會轉(zhuǎn)換成科學(xué)計數(shù)法
func main() {
var (
fs = []float64{}
)
fs = append(fs, 10000)
fs = append(fs, 99999)
fs = append(fs, 65536)
fs = append(fs, 100000)
fs = append(fs, 999999)
fs = append(fs, 1000000)
for _, i2 := range fs {
sprintf := fmt.Sprintf("f---%.f", i2)
fmt.Printf("%+v \n", sprintf)
sprintf = fmt.Sprintf("v--%v", i2)
fmt.Printf("%+v \n", sprintf)
sprintf = fmt.Sprintf("+v--%+v", i2)
fmt.Printf("%+v \n", sprintf)
fmt.Println("\n")
}
}
f---10000
v--10000
+v--10000
f---99999
v--99999
+v--99999
f---65536
v--65536
+v--65536
f---100000
v--100000
+v--100000
f---999999
v--999999
+v--999999
f---1000000
v--1e+06
+v--1e+06
建議:
func FormatFloat(f float64, fmt byte, prec, bitSize int) string {
return string(genericFtoa(make([]byte, 0, max(prec+4, 24)), f, fmt, prec, bitSize))
}
f: 傳入的float數(shù)字
fmt: 如果格式標記為 'e','E'和'f',則 prec 表示小數(shù)點后的數(shù)字位數(shù),
如果格式標記為 'g','G',則 prec 表示總的數(shù)字位數(shù)(整數(shù)部分+小數(shù)部分)
'b' (-ddddp±ddd,二進制指數(shù))
'e' (-d.dddde±dd,十進制指數(shù))
'E' (-d.ddddE±dd,十進制指數(shù))
'f' (-ddd.dddd,沒有指數(shù))
'g' ('e':大指數(shù),'f':其它情況)
'G' ('E':大指數(shù),'f':其它情況)
prec:精度(數(shù)字部分的長度,不包括指數(shù)部分)
bitSize:指定浮點類型(32:float32、64:float64)