Fork me on GitHub

Go语言开发-字符串-格式化浮点数

3.5.4.格式化浮点数

对于浮点数,我们可以指定其整体宽度、小数点后的位数及是否使用标准计数法和科学计数法。

在这里我们使用了for …range循环来遍历float64类型切片中的数字。自定义的Humanize() 函数返回了一个以字符串表示包含分组分隔符(简单的三位数字一组)和填充符的数字。

math.Modf()函数可以返回一个float64类型的值的整数部分和小数部分,且其整数部分和小数部分都是float64类型。为了得到以字符串表示的整数部分,我们使用fmt.sprintf()函数和格式化动作来强制输出正号,然后立即切片该得到的字符串以去除正号。对于小数部分,我们也使用了类似的方式,只不过这次我们使用了.m格式化动作修饰符来指定使用*占位符的小数位数(所以在这种情况下,如果小数位数为2,则格式化动作应该是%+.2f)。对于小数部分,我们去除了其开头-0 或+0。

整个字符串被从右到左插入了分组分隔符,然后,如果值为负数,则插入一个“-”符号。最后,我们将整数部分和小数部分连接起来并将其返回,必要时可使用空格填充。

%e,、%E、 %f、 %g和%G可以用于复数和浮点数。%e 和%E是科学计算法格式的(指数的)格式化动作,%f是浮点数格式的格式化动作,%g 和%G是常规浮点数格式的格式化动作。

然而,需要记住的一点是,修饰符会同时应用于复数的实部和虚部,例如,如果参数是一个复数,%6f格式产生的结果会占用至少20个字符。

对于上例中结果的第一列,我们希望小数点后具有不同的小数位数。为此,我们使用fmt.Sprintf()函数分别格式化复数的实部和虚部部分,然后使用%15s格式将结果以字符串的形式输出。对于其他的复数,我直接使用%f和%e格式化动作,其在输出时总会以圆括号将结果括起来。


目录


作者:Johnson
原创文章,版权所有,转载请保留原文链接。

发表评论

电子邮件地址不会被公开。 必填项已用*标注