>백엔드 개발 >Golang >부동 소수점 값에 너비와 정밀도를 사용할 때 fmt.Printf는 선행 0을 어떻게 처리합니까?

부동 소수점 값에 너비와 정밀도를 사용할 때 fmt.Printf는 선행 0을 어떻게 처리합니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-26 02:05:28740검색

  How Does fmt.Printf Handle Leading Zeros When Using Width and Precision for Floating-Point Values?

fmt.Printf 너비 및 정밀도 구문 불일치

부동 소수점 값에 대한 너비 및 정밀도 필드와 함께 fmt.Printf를 사용하는 방법은 다음과 같습니다. 문서의 불일치로 인해 혼란을 겪었습니다. 명령문:

"부동 소수점 값의 경우 width는 필드의 최소 너비를 설정하고 정밀도는 해당하는 경우 소수점 이하 자릿수를 설정합니다. 단, %g/%G의 경우 총계를 설정합니다. 자릿수."

문법적으로는 정확하지만 "it"은 너비가 아닌 정밀도를 의미하므로 모호해집니다. 이로 인해 예기치 않은 형식 동작이 발생할 수 있습니다.

부동 소수점 표기의 정밀도

다음 부동 소수점 값을 고려하세요.

123.45
12312.2
1.6069
0.6069
0.0006069

fmt.Printf("%.4g")를 사용하면 출력은 다음과 같습니다.

123.5
1.231e+04
1.607
0.6069
0.0006069

정밀도 필드(.4)가 소수점과 지수를 제외한 총 자릿수를 지정하는지 확인하세요. 따라서 마지막 두 값 앞에 0이 있어도 여전히 숫자로 계산되며 잘리지 않습니다.

너비 사양

반면에 너비 필드는 (예: g)는 소수점과 지수를 포함하여 필드의 최소 너비를 지정합니다. 형식화된 값이 이 너비를 초과하면 잘리지 않습니다. 그러나 선행 0은 4개 이상의 선행 0이 있을 때까지 너비에 포함되지 않습니다.

귀하의 경우 형식 문자열 .9g는 다음을 지정합니다. 최소 너비는 10이고 총 자릿수는 선행 0을 제외하고 9입니다. 결과 형식은 다음과 같습니다.

0.0606060606060606: 9 digits, 12 width
0.3333333333333333: 9 digits, 11 width
0.05: 3 digits, 10 width (padded with spaces)
0.4: 2 digits, 10 width (padded with spaces)
0.1818181818181818: 9 digits (rounded), 11 width

이는 정밀도와 너비 필드 간의 상호 작용과 선행 0이 최종 형식에 어떤 영향을 미칠 수 있는지 보여줍니다.

위 내용은 부동 소수점 값에 너비와 정밀도를 사용할 때 fmt.Printf는 선행 0을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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