Pemformatan Mata Wang dengan golang.org/x/text/currency
Apabila memformat nilai sebagai mata wang dalam Go, golang.org/x /text/pakej mata wang menyediakan penyelesaian yang mudah. Walau bagaimanapun, jika output muncul tanpa koma atau beribu-ribu pemisah, artikel ini meneroka kemungkinan punca dan penyelesaian.
Pemformatan Salah: Mata lwn Koma
Dalam kod yang disediakan , isu ini timbul daripada menggunakan mata wang.Simbol secara langsung dan bukannya menggunakan pemformatan yang lebih komprehensif yang disediakan oleh mesej.NewPrinter. Pendekatan yang betul ialah menggunakan message.NewPrinter untuk mengendalikan pemformatan khusus bahasa yang sesuai:
<code class="go">func (produto *Produto) FormataPreco(valor int64) string { unit, _ := currency.ParseISO("BRL") p := message.NewPrinter(language.BrazilianPortuguese) return p.Sprint(unit.Amount(float64(valor) / 100)) }</code>
Sumber Tempatan Sistem
Untuk memformat mata wang menggunakan sumber tempatan sistem, penyelesaiannya memerlukan membuat kesimpulan format daripada kod bahasa. Ini boleh dicapai menggunakan paparan. Tag:
<code class="go">n := display.Tags(language.English) for _, lcode := range []string{"en_US", "pt_BR", "de", "ja", "hi"} { lang := language.MustParse(lcode) cur, _ := currency.FromTag(lang) scale, _ := currency.Cash.Rounding(cur) // fractional digits dec := number.Decimal(100000.00, number.Scale(scale)) p := message.NewPrinter(lang) p.Printf("%24v (%v): %v%v\n", n.Name(lang), cur, currency.Symbol(cur), dec) }</code>
Sebagai alternatif, kod mata wang ISO boleh dihuraikan, tetapi bahasa output mesti ditentukan secara berasingan:
<code class="go">for _, iso := range []string{"USD", "BRL", "EUR", "JPY", "INR"} { cur := currency.MustParseISO(iso) scale, _ := currency.Cash.Rounding(cur) // fractional digits dec := number.Decimal(100000.00, number.Scale(scale)) p := message.NewPrinter(language.English) p.Printf("%v: %v%v\n", cur, currency.Symbol(cur), dec) }</code>
Keperluan Pembundaran
Mata wang tertentu memerlukan pembundaran dalam kenaikan (cth., 0.05 atau 0.50). Untuk menampung ini, pemprosesan tambahan diperlukan untuk menyediakan IncrementString yang betul kepada pemformat Perpuluhan:
<code class="go">scale, incCents := currency.Cash.Rounding(cur) // fractional digits incFloat := math.Pow10(-scale) * float64(incCents) incFmt := strconv.FormatFloat(incFloat, 'f', scale, 64) dec := number.Decimal(100000.26, number.Scale(scale), number.IncrementString(incFmt)) p.Printf("%24v %v, %4s-rounding: %3v%v\n", n.Name(lang), cur, incFmt, currency.Symbol(cur), dec)</code>
Dengan menggunakan pendekatan ini, adalah mungkin untuk memformat nilai mata wang dalam Go menggunakan golang.org/x/text/ mata wang sambil memastikan penyetempatan dan pemformatan yang betul berdasarkan sumber tempat sistem atau kod mata wang ISO.
Atas ialah kandungan terperinci Cara Menyelesaikan Isu Pemformatan Mata Wang dalam Go Menggunakan golang.org/x/text/currency. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!