>백엔드 개발 >Golang >Go에서 Float64를 최대 유효 자릿수를 갖는 고정 너비 문자열로 변환하는 방법은 무엇입니까?

Go에서 Float64를 최대 유효 자릿수를 갖는 고정 너비 문자열로 변환하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-05 15:46:10843검색

How to Convert Float64 to a Fixed-Width String with Maximum Significant Digits in Go?

Float64를 고정 너비 및 최대 유효 자릿수를 사용하는 문자열로 변환

고정 너비 테이블에 부동 소수점 숫자를 표시할 때 유효 자릿수 보존에 대한 우려가 발생합니다. 표준 fmt.Printf 함수는 이 측면에 대해 제한된 제어를 제공합니다.

해결책: 사용자 정의 서식

이 문제를 해결하기 위해 최적의 유효 자릿수를 결정하는 사용자 정의 서식 기능을 구현할 수 있습니다. 지정된 너비에 맞춥니다. 여기에는 문제의 숫자를 분석하고 과학적 표기법과 그에 따른 정규 형식 중에서 선택하는 작업이 포함됩니다. 규모.

구현:

// format12 formats x to be 12 chars long.
func format12(x float64) string {
    if x >= 1e12 {
        // For scientific notation, determine the width of the exponent.
        s := fmt.Sprintf("%.g", x)
        format := fmt.Sprintf("%%12.%dg", 12-len(s))
        return fmt.Sprintf(format, x)
    }

    // For regular form, determine the width of the fraction.
    s := fmt.Sprintf("%.0f", x)
    if len(s) == 12 {
        return s
    }
    format := fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1)
    return fmt.Sprintf(format, x)
}

테스트:

fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0,
    9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119}

for _, f := range fs {
    fmt.Println(format12(f))
}

출력:

0.0000000000
0.1234567890
1234.5678901
123456789012
1.234568e+12
9405090880.5
9.405091e+19
9.40509e+119

위 내용은 Go에서 Float64를 최대 유효 자릿수를 갖는 고정 너비 문자열로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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