Golang中printf打印浮点数时如何避免前导零

4

http://play.golang.org/p/3mjFDTTOXG

使用printf打印整数没问题,但是浮点数缺少前导零。

fmt.Printf("%03.6f\n", 1.234)
>1.234000

为什么会发生这种情况?如何使前导零显示?

golang v1.4.1

编辑

我解决了。

fmt.Printf("%010.6f\n", 1.234)

现在已经没问题了。

编辑

来自https://golang.org/pkg/fmt/

宽度和精度以Unicode代码点(即符文)为单位进行测量。(这与C的printf不同,后者的单位始终是字节。)一个或两个标志都可以被字符“*”替换,从而使它们的值从下一个操作数中获取,该操作数必须是int类型。

1个回答

4
原因是您将要打印的字符串的精度设置为6,宽度仅为3。请参考fmt package
引用如下:

可以在动词后面指定一个可选十进制数字来指定宽度。如果没有指定,则宽度足以表示值。可以在(可选)宽度之后通过一个点加上一位小数来指定精度。如果没有使用点,则使用默认精度。

...

0填充前导零而不是空格; 对于数字,这会将填充移动到符号后面

因此,您会得到1.234000。要获得前导0,需要将字符串的宽度增加到超过8(1 + . + 234000的长度)。因此,使用%09.6f将得到01.234000

谢谢,我注意到这与C语言的printf不同。 - wener
@wener,这与C的printf函数并没有不同,它完全相同。(唯一的区别是如果你有多字节符文)。 - Dave C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接