Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Menyelesaikan Isu Pemformatan Mata Wang dalam Go Menggunakan golang.org/x/text/currency

Cara Menyelesaikan Isu Pemformatan Mata Wang dalam Go Menggunakan golang.org/x/text/currency

Patricia Arquette
Patricia Arquetteasal
2024-10-24 02:18:29664semak imbas

How to Fix Currency Formatting Issues in Go Using golang.org/x/text/currency

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{&quot;en_US&quot;, &quot;pt_BR&quot;, &quot;de&quot;, &quot;ja&quot;, &quot;hi&quot;} {
    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(&quot;%24v (%v): %v%v\n&quot;, 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{&quot;USD&quot;, &quot;BRL&quot;, &quot;EUR&quot;, &quot;JPY&quot;, &quot;INR&quot;} {
    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(&quot;%v: %v%v\n&quot;, 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(&quot;%24v %v, %4s-rounding: %3v%v\n&quot;,
    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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn