부동 소수점 숫자를 고정 너비의 유효 자릿수 보존 문자열로 변환
질문:
Go에 변환하는 표준 라이브러리 함수가 있나요? 부동 소수점 숫자(float64)를 고정 너비의 문자열로 변환하여 최대 유효 자릿수를 보존하시겠습니까?
답변:
Go 표준 라이브러리는 다음을 제공하지 않습니다. 이 목적을 위한 전용 기능을 사용하면 원하는 형식을 달성하기 위한 맞춤형 솔루션을 구현할 수 있습니다.
접근 방식에는 다음을 기반으로 한 분기가 포함됩니다. float64 숫자의 값입니다. 1e12보다 크거나 같은 숫자의 경우 과학적 표기법 형식이 사용됩니다. 1e12보다 작은 숫자의 경우 일반 형식이 사용됩니다.
두 경우 모두 원하는 12자 너비에 맞추는 데 필요한 분수 자릿수를 결정하기 위해 예비 형식 지정이 수행됩니다. 그런 다음 계산된 정밀도를 사용하여 최종 형식 문자열이 구성됩니다.
코드 조각:
// format12 formats x to be 12 chars long. func format12(x float64) string { if x >= 1e12 { // Check to see how many fraction digits fit in: s := fmt.Sprintf("%.g", x) format := fmt.Sprintf("%%12.%dg", 12-len(s)) return fmt.Sprintf(format, x) } // Check to see how many fraction digits fit in: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!