在Go项目中开发中尽量不要使用fmt.Sprintf将其它格式转换为String
使用fmt.Sprintf时需要注意如果使用%v, %+v, 超过100W会转换成科学计数法
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数字
fmt: 如果格式标记为 'e','E'和'f',则 prec 表示小数点后的数字位数,
如果格式标记为 'g','G',则 prec 表示总的数字位数(整数部分+小数部分)
'b' (-ddddp±ddd,二进制指数)
'e' (-d.dddde±dd,十进制指数)
'E' (-d.ddddE±dd,十进制指数)
'f' (-ddd.dddd,没有指数)
'g' ('e':大指数,'f':其它情况)
'G' ('E':大指数,'f':其它情况)
prec:精度(数字部分的长度,不包括指数部分)
bitSize:指定浮点类型(32:float32、64:float64)
网友评论