2015-04-22 76 views
2

http://play.golang.org/p/3mjFDTTOXGgolang printf的浮動沒有前導零

的printf int是好的,但有浮動,我沒有前導零。

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

爲什麼會發生這種情況?如何使前導零顯示?

golang V1.4.1

編輯

我想通了

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

現在這是確定的。

EDIT

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

寬度和精度的Unicode代碼點爲單位進行測量,即,符文。 (這與C的printf不同,後者的單位總是以字節爲單位)。其中一個或兩個標誌都可以用字符'*'替換,使得它們的值從下一個操作數獲得,該操作數必須是int類型。

回答

4

原因是您將6設置爲將要打印的字符串的精度,只將寬度設置爲3。來自fmt package.

寬度由緊接在 之後的可選十進制數指定。如果不存在,則寬度代表 的值。精度在(可選)寬度後用 後跟一個十進制數字指定。如果沒有時間段,則使用默認精度 。

...

0與前導零而不是空格;
爲數字,這將移動填充後的符號

因此,您得到1.234000。要獲得前導0,您需要增加字符串的寬度超過8(長度爲1 +。+ 234000)。所以與%09.6f你會得到01.234000

+0

謝謝,我注意到,這是不同於c的printf – wener

+0

@wener,這是*不*不同於C的printf;它完全一樣。 (唯一的區別是如果你有多字節符文)。 –

+0

@DaveC我第一次聽錯了,該死的 – wener