>백엔드 개발 >Golang >golang.org/x/text/currency를 사용하여 Go에서 통화 형식 문제를 해결하는 방법

golang.org/x/text/currency를 사용하여 Go에서 통화 형식 문제를 해결하는 방법

Patricia Arquette
Patricia Arquette원래의
2024-10-24 02:18:29787검색

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

golang.org/x/text/currency를 사용한 통화 형식 지정

Go에서 값을 통화 형식으로 지정할 때 golang.org/x /text/currency 패키지는 편리한 솔루션을 제공합니다. 그러나 출력이 쉼표나 천 단위 구분 기호 없이 나타나는 경우 이 문서에서는 잠재적인 원인과 해결 방법을 살펴봅니다.

잘못된 형식: 점 대 쉼표

제공된 코드에서 , message.NewPrinter에서 제공하는 보다 포괄적인 형식을 사용하는 대신 통화.Symbol을 직접 사용하면 문제가 발생합니다. 올바른 접근 방식은 message.NewPrinter를 사용하여 적절한 언어별 형식을 처리하는 것입니다.

<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>

시스템 로캘 리소스

시스템 로캘 리소스를 사용하여 통화 형식을 지정하려면, 솔루션을 사용하려면 언어 코드에서 형식을 유추해야 합니다. 이는 디스플레이를 사용하여 달성할 수 있습니다.

<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>

또는 ISO 통화 코드를 구문 분석할 수 있지만 출력 언어를 별도로 지정해야 합니다.

<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>

반올림 요구 사항

특정 통화의 경우 반올림이 필요합니다(예: 0.05 또는 0.50). 이를 수용하려면 올바른 IncrementString을 Decimal 포맷터에 제공하기 위한 추가 처리가 필요합니다.

<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>

이러한 접근 방식을 활용하면 golang.org/x/text/를 사용하여 Go에서 통화 값의 형식을 지정할 수 있습니다. 시스템 로캘 리소스 또는 ISO 통화 코드를 기반으로 올바른 현지화 및 형식을 보장하면서 통화를 사용하세요.

위 내용은 golang.org/x/text/currency를 사용하여 Go에서 통화 형식 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.