Go 中的貨幣格式與golang.org/x/text/currency 的Currency.Symbol
golang.org/x/textbol
golang.org/x/text /貨幣包為格式化貨幣值提供了廣泛的支援。本文示範如何利用Currency.Symbol 實現正確的格式設置,解決千位分隔符號和點位置不正確等常見問題。
問題:
使用者遇到以下問題:它們的輸出缺少千位分隔符,並且錯誤地顯示貨幣格式的點而不是逗號。
潛在問題:
問題源自於currency.Symbol 的預設行為,其中傳回貨幣符號,不帶任何特定於區域設定的格式。因此,小數點和千位分隔符號未正確應用。
解決方案 1:從語言代碼推斷貨幣格式
<code class="go">package main import ( "golang.org/x/text/currency" "golang.org/x/text/language" "golang.org/x/text/message" ) func main() { unit, _ := currency.ParseISO("BRL") const valor = 12345678 p := message.NewPrinter(language.BrazilianPortuguese) formatted := p.Sprint(currency.Symbol(unit.Amount(float64(valor) / 100))) println(formatted) // Output: R$ 123.456,78 }</code>
一種解決方案涉及從語言代碼推斷貨幣格式語言包中使用的語言代碼。透過將印表機的語言設定為所需的區域設置,輸出將根據區域設定的約定進行格式化。例如,對於巴西葡萄牙語,輸出格式為「R$ 123.456,78。」
解決方案2:解析ISO 貨幣代碼並指定語言
<code class="go">package main import ( "golang.org/x/text/currency" "golang.org/x/text/language" "golang.org/x/text/message" "golang.org/x/text/number" ) func main() { unit, _ := currency.ParseISO("BRL") const valor = 12345678 lang := language.Portuguese p := message.NewPrinter(lang) formatted := p.Sprintf( number.Format("%q%v", currency.Symbol(unit.Amount(float64(valor) / 100), lang), number.Decimal(valor, number.Scale(2)), )) println(formatted) // Output: R$ 123.456,78 }</code>
另一種方法是解析ISO 貨幣代碼並明確設定格式化語言。此方法在指定所需的輸出格式方面提供了更大的靈活性。
增量舍入貨幣的注意事項
增量舍入的貨幣(例如,按0.05 或0.50),需要進行額外的處理才能為Decimal 格式化程式提供合適的IncrementString。這確保了舍入值的格式正確。
結論
透過將Currency.Symbol與語言感知列印結合使用,開發人員可以在Go中實現精確的貨幣格式化,解決了千位分隔符不正確和小數點放錯位置的常見問題。以上是如何解決Go中Currency.Symbol的貨幣格式問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!