Nice programing

Golang : 인쇄 할 때 숫자를 0으로 채우는 방법은 무엇입니까?

nicepro 2020. 10. 25. 13:02
반응형

Golang : 인쇄 할 때 숫자를 0으로 채우는 방법은 무엇입니까?


숫자를 인쇄하거나 0 패딩으로 문자열을 만들어 고정 너비로 ​​만들 수 있습니까?

예를 들어, 내가 번호가 12있고 그것을 만들고 싶다면 000012.


fmt 패키지는 다음을 수행 할 수 있습니다.

fmt.Printf("|%06d|%6d|\n", 12, 345)

% 06d의 0은 너비가 6이되고 0으로 채워집니다. 두 번째는 공백으로 채워집니다.

http://play.golang.org/p/cinDspMccp 에서 실제로 작동하는 모습을 볼 수 있습니다.


이를 달성하는 가장 간단한 방법이 있습니다. 사용하다

func padNumberWithZero(value uint32) string {
    return fmt.Sprintf("%02d", value)
}

fmt.Sprintf어디에도 인쇄하지 않고 문자열을 형식화하고 반환합니다. 여기 %02d에 숫자가 2 미만인 값에 대해 왼쪽에 패드 0이 표시됩니다. 주어진 값에 2 개 이상의 숫자가 있으면 패딩되지 않습니다. 예를 들면 :

  • 입력이 1이면 출력은 01이됩니다.
  • 입력이 12이면 출력은 12입니다.
  • 입력이 1992이면 출력은 1992입니다.

%03d더 많은 0 패딩에 이상을 사용할 수 있습니다 .


of 및 패딩 문자와 함께 fmt 패키지Printf함수를 사용하십시오 .width60

import "fmt"
fmt.Printf("%06d", 12) // Prints to stdout '000012'

width다음과 같이 작품 설정 :

fmt.Printf("%d", 12)   // Uses default width,                          prints '12'
fmt.Printf("%6d", 12)  // Uses a width of 6 and left pads with spaces, prints '    12'

Golang (및 대부분의 다른 언어)에서 지원하는 유일한 패딩 문자는 공백 및 0:

fmt.Printf("%6d", 12)   // Default padding is spaces, prints '    12'
fmt.Printf("%06d", 12)  // Change to 0 padding,       prints '000012'

마이너스를 앞에 추가하여 인쇄를 오른쪽 정렬 할 수 있습니다 -.

fmt.Printf("%-6d", 12)   // Padding right-justified, prints '12    '

부동 소수점 숫자의 경우 너비에는 전체 형식 문자열이 포함됩니다.

fmt.Printf("%6.1f", 12.0) // Prints '0012.0' (width is 6, precision is 1 digit)

*숫자 대신 사용 하고 너비를 int매개 변수 로 전달 하여 프로그래밍 방식으로 너비를 설정할 수도 있습니다 .

myWidth := 6
fmt.Printf("%0*d", myWidth, 12) // Prints '000012' as before

이는 인쇄하려는 가장 큰 값이 런타임에만 알려진 경우에 유용 할 수 있습니다 ( maxVal다음 예제에서 호출 됨 ).

myWidth := 1 + int(math.Log10(float64(maxVal)))
fmt.Printf("%*d", myWidth, nextVal)

마지막으로, 인쇄하고 싶지 stdout않지만 문자열을 반환 하려면 동일한 매개 변수를 사용 Sprintf하여 fmt 패키지 에서도 사용 하십시오.

s := fmt.Sprintf("%06d", 12) // returns '000012' as a String

" Go lang의 인쇄 형식 목록 "이라는 질문 은 플래그도 있음을 상기시킵니다.

- 왼쪽이 아닌 오른쪽에 공백이있는 채우기 (필드를 왼쪽 정렬)


DaddyOh/golang-samples/pad.go다른 문자열 시퀀스 ( ' 0'또는 ' ' 보다 더 복잡함)로 채우려면로 더 많은 채우기 예제를 볼 수 있습니다 .

  • leftPad(s string, padStr string, pLen int)
  • rightPad(s string, padStr string, pLen int)
  • leftPad2Len(s string, padStr string, overallLen int)
  • rightPad2Len(s string, padStr string, overallLen int)

참조 play.golang.org:

1234567890

leftPad(str, "*", 3)  ***1234567890
leftPad2Len(str, "*-", 13)  -*-1234567890
leftPad2Len(str, "*-", 14)  *-*-1234567890
leftPad2Len(str, "*", 14)  ****1234567890
leftPad2Len(str, "*-x", 14)  x*-x1234567890
leftPad2Len(str, "ABCDE", 14)  BCDE1234567890
leftPad2Len(str, "ABCDE", 4)  7890
rightPad(str, "*", 3)  1234567890***
rightPad(str, "*!", 3)  1234567890*!*!*!
rightPad2Len(str, "*-", 13)  1234567890*-*
rightPad2Len(str, "*-", 14)  1234567890*-*-
rightPad2Len(str, "*", 14)  1234567890****
rightPad2Len(str, "*-x", 14)  1234567890*-x*
rightPad2Len(str, "ABCDE", 14)  1234567890ABCD
rightPad2Len(str, "ABCDE", 4)  1234

func lpad(s string,pad string, plength int)string{
    for i:=len(s);i<plength;i++{
        s=pad+s
    }
    return s
}

lpad ( "3", "0", 2) 결과 : "03"

lpad ( "12", "0", 6) 결과 : "000012"

참고URL : https://stackoverflow.com/questions/25637440/golang-how-to-pad-a-number-with-zeros-when-printing

반응형