> 백엔드 개발 > Golang > `%g` 및 너비/정밀도 필드가 포함된 `fmt.Printf`가 예기치 않게 작동하는 이유는 무엇입니까?

`%g` 및 너비/정밀도 필드가 포함된 `fmt.Printf`가 예기치 않게 작동하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-26 17:02:02
원래의
361명이 탐색했습니다.

Why Does `fmt.Printf` with `%g` and Width/Precision Fields Behave Unexpectedly?

%g에 너비 및 정밀도 필드가 있는 fmt.Printf가 예기치 않게 동작합니다

fmt.Printf를 사용하여 일관된 너비로 부동 소수점 형식을 지정하려고 할 때 (), 너비 및 정밀도 필드 모두에 %g 형식 지정자를 사용할 때 예상대로 작동하지 않을 수 있습니다.

문서에 따르면 %g의 정밀도 필드는 선행 문자를 제외한 총 자릿수를 설정합니다. 0. 그러나 %g 형식 지정자에는 혼란스러울 수 있는 몇 가지 고유한 동작이 있습니다.

선행 0 및 자릿수 계산:

  • 소수 부분의 선행 0은 다음과 같습니다. 숫자로 계산되지 않습니다.
  • 0이 아닌 숫자 뒤의 0은 숫자로 계산됩니다.

예:

  • fmt .Printf("%.4g", 0.12345)는 0.1235를 제공합니다.
  • fmt.Printf("%.4g", 0.012345)는 0.01235를 제공합니다.
  • fmt.Printf("%.4g" , 0.0012345)는 0.001234를 제공합니다.

정밀도 및 너비:

  • 너비 필드는 소수점이나 지수를 포함한 최소 너비를 지정합니다.
  • 자릿수가 지정된 너비를 초과하는 경우 너비 필드는 무시됩니다.

귀하의 사례:

귀하의 예에서는 최소 너비 10과 총 9자리를 지정하는 .9g를 사용했습니다. 그러나 다음 동작이 발생합니다.

  • 0.0606060606060606: 12자리가 필요하므로 최소 너비가 무시됩니다.
  • 0.3333333333333333: 11자리가 필요하므로 최소 너비가 무시됩니다.
  • 0.05 및 0.4: 9자리가 필요하며 최소 너비보다 작으므로 공백으로 채워집니다.
  • 0.1818181818181818: 반올림 후 9자리가 필요하므로 최소 너비는 무시됩니다.

위 내용은 `%g` 및 너비/정밀도 필드가 포함된 `fmt.Printf`가 예기치 않게 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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