如果一个除法除不尽,将得到一个很长一串数字。
fmt.Println(1.0/3.0)
得到
0.3333333333333333
为了处理这类格式化问题,fmt包提供了Printf函数。Printf代表“带格式的打印”。它接受一个字符串并将一个或多个值插入其中,以特定的方式进行格式化。如果想保留2位小数
fmt.Printf("%0.2f",1.0/3.0)
Printf的第一个参数是一个字符串,用于格式化输出。它的大部分格式与字符串中显示的格式完全相同。但是,任何百分号(%)都将被视为格式化动词的开始,字符串的一部分将被特定格式的值所替换。
%f 浮点数
%d 十进制整数
%s 字符串
%t 布尔值
%v 任何值
%#v 任何值,在go程序中显示的格式进行格式化
我们要特别指出%#v格式化动词。因为它以Go代码中的显示方式而不是通常的显示方式来打印值,%#v可以显示一些值,如果不使用%#v的话,这些值可能会在输出中被隐藏,例如,在这段代码中,%#v显示了一个空字符串、一个制表符和一个换行符,所有这些在用%v打印时都是不可见的。
在格式化动词的百分号后面指定最小宽度。如果匹配该动词的参数比最小宽度短,则将使用空格进行填充,直到达到最小宽度为止。
对于浮点数的精度,%6.2f,6代表整个数字的最小宽度,2代表小数点以后的宽度。整个数的最小宽度包括数字位和小数点。小数点后的宽度是要显示的小数位数。如果给出更精确的数字,它将被四舍五入(向上或向下)以适应给定的小数位数。最后一种格式是"%.2f",将允许我们取任意精度的浮点数,并将它们四舍五入到小数点后两位。
如果只是返回格式化的字符串而不是打印它可以使用
var result = fmt.Sprintf("%0.2f",1.0/3.0)
fmt.Println(result)