go浮点数截取n位数(四舍五入或舍弃尾数)并舍弃后面的0值
文章目录
formatFloat函数 - 将浮点数表示为字符串并返回
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
-
bitSize表示f的来源类型(32:float32、64:float64),会据此进行舍入。
-
fmt表示格式:‘f’(-ddd.dddd)、‘b’(-ddddp±ddd,指数为二进制)、‘e’(-d.dddde±dd,十进制指数)、‘E’(-d.ddddE±dd,十进制指数)、‘g’(指数很大时用’e’格式,否则’f’格式)、‘G’(指数很大时用’E’格式,否则’f’格式)。
-
prec控制精度(排除指数部分):对’f'、‘e’、‘E’,它表示小数点后的数字个数;对’g'、‘G’,它控制总的数字个数。如果prec 为-1,则代表使用最少数量的、但又必需的数字来表示f。
golang浮点数截取尾数有两种模式:
1.保留n尾数并四舍五入
// FormatFloatRound 强制舍弃尾数(四舍五入,舍弃后面的0值)
func FormatFloatRound(num float64, n int) float64 {
// 默认乘1
d := float64(1)
if decimal > 0 {
// 10 的 n 次方
d = math.Pow10(n)
}
// 保留 n 位小数: math.Round作用就是返回浮点数的整数部分(四舍五入)
f2 := math.Round(f*d) / d
// 舍弃后面的0值: -1 参数表示保持原小数位数
res := strconv.FormatFloat(math.Round(num*d)/d, 'f', -1, 64)
// 转换成float64
last, _ := strconv.ParseFloat(res, 64)
return last
}
2.直接截取n尾数并舍弃后面的数字
// TruncFloat 强制舍弃尾数(直接舍弃尾数,舍弃后面的0值)
func TruncFloat(f float64, n int) float64 {
// 默认乘1
d := float64(1)
if n > 0 {
// 10 的 n 次方
d = math.Pow10(n)
}
// 截断 n 位小数: math.trunc作用就是返回浮点数的整数部分
f2 := math.Trunc(f*d) / d
// 舍弃后面的0值: -1 参数表示保持原小数位数,千万要注意,如果你指定了位数就会四舍五入了
fs := strconv.FormatFloat(f2, 'f', -1, 64)
// 转换成float64
f3, _ := strconv.ParseFloat(fs, 10)
return f3
}