最近在项目中碰到不少次float转string,同时要求保留小数点后几位,而且去掉小数点后0的场景code
虽然问题很简单,可是隔了挺久没处理这种场景就有些生疏了,本身也搜了一下,不少回答都不太满意。这里贴一下本身的作法,若是有更好的解决办法的话,还请多多指教orm
// 主要逻辑就是先乘,trunc以后再除回去,就达到了保留N位小数的效果 func FormatFloat(num float64, decimal int) string { // 默认乘1 d := float64(1) if decimal > 0 { // 10的N次方 d = math.Pow10(decimal) } // math.trunc做用就是返回浮点数的整数部分 // 再除回去,小数点后无效的0也就不存在了 return strconv.FormatFloat(math.Trunc(num*d)/d, 'f', -1, 64) }
其余的一些经常使用的格式化浮点数的democi
// 2表明精度,这种方式会有小数点后无效的0的状况 strconv.FormatFloat(123.123 'f', 2, 64) // 效果同上 fmt.Sprintf("%.2f", 123.123) // g能够去掉小数点后无效的0 fmt.Sprintf("%g", 123.00) // 效果同上,能够去掉0,可是达不到保留指定位数的效果 strconv.FormatFloat(a, 'g', -1, 64)
上面这些例子其实灵活运用一下也能够达到最开始的效果string