首頁  >  文章  >  後端開發  >  fmt.Printf 的 %g 格式說明符中的精確度如何與寬度一起使用?

fmt.Printf 的 %g 格式說明符中的精確度如何與寬度一起使用?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-26 12:23:29243瀏覽

How does precision work with width in fmt.Printf's %g format specifier?

fmt.Printf 如何處理 %g 中的寬度和精確度欄位?

fmt.Printf 在 % 中的寬度和精確度欄位的行為g 可能會令人困惑。要理解它,我們需要澄清文件。

文件中的以下語句尤其重要:

precision sets the number of places after the decimal, if appropriate, except that for %g/%G it sets the total number of digits.

在這個語句中,「it」指的是精確度,而不是寬度。這意味著,寬度指定最小欄位寬度,而精確度指定顯示的總位數,不包括前導零。

例如,當我們使用 fmt.Printf("%.4g") 格式化 123.45 時,結果是123.5。這是因為精確度設定為 4,而 123.5 有 4 位數字(不包括小數點)。

但是,當有前導零時,行為會變得更加複雜。前導零不計為數字,少於 4 個時不會被刪除。例如,當我們使用 fmt.Printf("%.4g") 格式化 0.00012345 時,結果是 0.0001234。這是因為精度設定為 4,而 0.0001234 有 4 位數字(不包括小數點和前導零)。

現在我們了解了精確度的行為方式,我們可以檢查寬度欄位。寬度指定欄位的最小寬度,包括小數位和任何指數。如果格式化值的位數多於指定的寬度,它將超出寬度。但是,精度優先,因此該值必須先滿足精度要求。

在您的範例中,您指定 0.9g,這表示總共 9 位數字(不包括前導零),最小寬度為 10 ,包括小數點和任何指數。讓我們分別檢查每個值:

  • 0.0606060606060606:不帶前導零的 9 位數字為 0.0606060606,已經是 12 個字元寬,超過了最小寬度 10。
  • 0.3333333333333333:類似於先前的值,不帶前導零的 9 位數字為 0.333333333,其寬度為 11 個字符,超過了最小寬度 10。
  • 0.05:不含前導零的 9 位數字為 0.05,小於最小寬度 10。將填充 6 個空格以滿足最小寬度。
  • 0.4:與先前的值類似,不帶前導零的 9 位數字為 0.4,小於最小寬度 10。將用6個空格以滿足最小寬度。
  • 0.1818181818181818:沒有前導零的9位數字是0.181818182,這是由於四捨五入造成的。它超過了 11 個字元的最小寬度 10。

這解釋了您觀察到的意外寬度。

以上是fmt.Printf 的 %g 格式說明符中的精確度如何與寬度一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn