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


99

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

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

답변:


176

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

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

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

여기에서 실제 동작을 볼 수 있습니다 : http://play.golang.org/p/cinDspMccp


2
패드를 오른쪽에 놓으려면 어떻게해야합니까? 플래그를 사용 -하면 공백 만 제공되며 0이 필요합니다.
majidarif

5
나중에 문자열을 사용하려면 Sprintf대신 사용하십시오.Printf
oliverpool

42

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

29

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

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

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

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

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


10

" 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

Eric Palmer는 golang 샘플로 자신의 저장소를 제거하여 링크가 더 이상 작동하지 않습니다.
Konstantin Azizov

1
@KonstantinAzizov 좋은 지적입니다. 그 링크를 복원했습니다. 일종의.
VonC

3
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"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.