우편 번호에 01001과 같은 선행 0을 인쇄하는 좋은 방법을 찾으려고합니다. 숫자는 1001로 저장되지만 좋은 방법은 무엇입니까?
나는 두 가지 경우 중 하나를 사용하여 숫자가 몇 자릿수인지 알아 내고 인쇄를 위해 여분의 0을 가진 char 배열로 변환하려고 생각했지만 도울 수는 없지만 사용할 수있는 방법이 있다고 생각합니다. 나를 피하는 printf 형식 구문.
답변
printf("%05d", zipCode);
는 0
당신이 패딩과 무엇을 나타냅니다 5
쇼에게 정수의 길이를. 예를 들어 "%02d"
(날짜에 유용함)을 사용 하면 1 열의 숫자에 대해 0 만 채 웁니다 (. 06
대신 6
). 예제 2 "%03d"
는 1 열에서 1 개의 숫자에 대해 2 0을 채우고 10의 열에있는 숫자에 대해서는 1을 채워 넣습니다. 즉. (번호 7이 채워 007
지고 번호 17이가 채워짐 017
).
답변
올바른 해결책은 우편 번호를 데이터베이스에 STRING으로 저장하는 것입니다. 숫자처럼 보일 수도 있지만 그렇지 않습니다. 각 부분마다 의미가있는 코드입니다.
숫자는 산술을하는 것입니다. 우편 번호는 그렇지 않습니다.
답변
최소 필드 너비 앞에 0을 배치합니다.
printf("%05d",zipcode);
답변
우편 번호는 고도로 지역화 된 필드이며 많은 국가에서 영국, 캐나다와 같은 우편 번호에 문자가 있습니다. 따라서이 예에서는 문자열 / varchar 필드를 사용하여 다른 국가에서 사용자 / 고객 / 클라이언트 / 등을 배송하거나 가져 오는 경우 저장해야합니다.
그러나 일반적인 경우 권장 답변 ( printf("%05d", number);
)을 사용해야합니다 .
답변
* NIX 시스템을 사용중인 경우 :
man 3 printf
다음과 유사한 매뉴얼 페이지가 표시됩니다.
0 값을 0으로 채워야합니다. d, i, o, u, x, X, a, A, e, E, f, F, g 및 G 변환의 경우 변환 된 값은 공백이 아니라 왼쪽에 0으로 채워집니다. 0 및-플래그가 모두 나타나면 0 플래그는 무시됩니다. 숫자 변환 (d, i, o, u, x 및 X)으로 정밀도를 지정하면 0 플래그가 무시됩니다. 다른 변환의 경우 동작이 정의되지 않습니다.
C에 대한 질문이지만 이 페이지가 도움 이 될 수 있습니다.
답변
sprintf(mystring, "%05d", myInt);
여기서 “05”는 “앞에 0이있는 5 자리 숫자를 사용합니다”라고 말합니다.
답변
printf는 다양한 형식화 옵션을 허용합니다.
전의:
printf("leading zeros %05d", 123);