其实之前也写过好几个版本,不过那些版本最终都是使用 float64
来保存,感觉吧,还是有点不太靠谱。
这次这个版本,索性使用 strings
相关方法,最后结果也保存为 string
类型
func Truncate(f float64, prec int) string { n := strconv.FormatFloat(f, 'f', -1, 64) if n == "" { return "" } if prec >= len(n) { return n } newn := strings.Split(n, ".") if len(newn) < 2 || prec >= len(newn[1]) { return n } return newn[0] + "." + newn[1][:prec] }
使用方式
package main import ( "strconv" "strings" ) func Truncate(f float64, prec int) string { n := strconv.FormatFloat(f, 'f', -1, 64) if n == "" { return "" } if prec >= len(n) { return n } newn := strings.Split(n, ".") if len(newn) < 2 || prec >= len(newn[1]) { return n } return newn[0] + "." + newn[1][:prec] } func main() { f := 1.0 / 3.0 println(Truncate(f,8)) }
不过还有另外一个版本,哈哈
package main import ( "strconv" "strings" ) func Truncate(f float64, prec int) string { n := strconv.FormatFloat(f, 'f', -1, 64) if n == "" { return "" } ll := len(n) if prec >= ll { return n } dotn := strings.Index(n, ".") if dotn <= -1 || prec + dotn >= ll { return n } return n[:dotn + prec + 1 ] } func main() { f := 33333330.1234567890 println(Truncate(f,8)) }
目前尚无回复