【问题标题】:golang printf float no leading zerogolang printf float 没有前导零
【发布时间】:2015-04-22 14:01:06
【问题描述】:

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

printf int 没问题,但是使用 float,我没有前导零。

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 类型。

【问题讨论】:

    标签: go printf


    【解决方案1】:

    原因是您将要打印的字符串的精度设置为 6,而宽度仅设置为 3。来自fmt package.

    宽度由紧随其后的可选十进制数字指定 动词。如果不存在,则宽度是表示所必需的 价值。精度在(可选)宽度之后由 句点后跟一个十进制数。如果不存在经期,则 使用默认精度。

    ...

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

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

    【讨论】:

    • 谢谢,我注意到了,这和 c 的 printf 不同
    • @wener,这与 C 的 printf没有不同;完全一样。 (唯一的区别是你是否有多字节符文)。
    猜你喜欢
    • 2011-06-27
    • 2016-01-15
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多