> 백엔드 개발 > Golang > 고정 너비 및 최대 유효 자릿수를 사용하여 Go에서 Float64 숫자를 인쇄하는 방법은 무엇입니까?

고정 너비 및 최대 유효 자릿수를 사용하여 Go에서 Float64 숫자를 인쇄하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-04 01:47:10
원래의
622명이 탐색했습니다.

How to Print Float64 Numbers in Go with Fixed Width and Maximum Significant Digits?

고정 너비 및 유효 자릿수를 사용하여 Float64 숫자 인쇄

고정 너비 12자로 테이블에 float64 숫자를 인쇄해야 한다고 상상해 보세요. 가능한 최대 유효 자릿수. 다음 예를 고려하십시오.

fmt.Printf("%12.6g\n", 9.405090880450127e+119) //"9.40509e+119"
fmt.Printf("%12.6g\n", 0.1234567890123)        //"    0.123457"
fmt.Printf("%12.6g\n", 123456789012.0)         //" 1.23457e+11"
로그인 후 복사

보시다시피 .6g 형식 지정자를 사용하는 기본 fmt.Printf 함수는 유효 숫자를 자르거나 과학적 표기법을 사용하여 정밀도가 손실될 수 있습니다. 표준 라이브러리 함수를 사용하여 원하는 형식을 얻을 수 있는 방법이 있습니까?

구조에 대한 사용자 정의 형식

우리의 요구 사항을 정확히 충족하는 간단한 표준 라이브러리 기능은 없습니다. 그러나 원하는 너비와 최대 유효 자릿수를 고려하는 사용자 정의 형식 지정 기능을 개발할 수 있습니다. 이에 접근하는 방법은 다음과 같습니다.

  1. 정규 형식과 과학적 표기법 사이의 전환점이기 때문에 숫자가 1e12보다 크거나 같은지 확인하세요.
  2. 정규 형식의 경우, 원하는 너비에 맞는 분수 자릿수를 결정합니다. Sprintf를 사용하여 너비와 정밀도를 모두 지정하는 형식 문자열을 구성합니다.
  3. 과학 표기법의 경우 지수 너비(예: e 1, e 10, e 100)를 확인하고 분수에 대해 가능한 최대 정밀도를 계산합니다. 나머지 너비 내의 부분.

다음은 구현 예입니다. Go:

import (
    "fmt"
)

func format12(x float64) string {
    if x >= 1e12 {
        exp := fmt.Sprintf("%.g", x)
        return fmt.Sprintf("%%12.%dg", 12-len(exp))
    }
    s := fmt.Sprintf("%.0f", x)
    if len(s) == 12 {
        return s
    }
    return fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1)
}
로그인 후 복사

다양한 float64 값으로 이 함수를 테스트하면 다음과 같은 결과가 나옵니다.

0.0000000000
0.1234567890
1234.5678901
123456789012
1.234568e+12
9405090880.5
9.405091e+19
9.40509e+119
로그인 후 복사

이는 가능한 최대 유효 숫자를 사용하여 고정 너비로 ​​float64 숫자를 인쇄하는 방법을 보여줍니다. 사용자 정의 서식을 사용하여 숫자를 변환합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿