문제

나는 우편 번호의 01001과 같은 Leading 0을 인쇄하는 좋은 방법을 찾으려고 노력하고 있습니다. 숫자는 1001로 저장되지만 좋은 방법은 무엇입니까?

나는 두 가지 사례 진술을 사용하는 것을 생각했고, 그 숫자가 얼마나 많은 숫자인지 알아 내고 인쇄를 위해 추가 0을 가진 숯 배열로 변환 할 수는 있지만 도움은 할 수 없지만이를 수행 할 수있는 방법이 있다고 생각합니다. Printf Format Syntax를 피하고 있습니다.

도움이 되었습니까?

해결책

printf("%05d", zipCode);

다른 팁

올바른 솔루션은 데이터베이스에 우편 번호를 문자열로 저장하는 것입니다. 숫자처럼 보일 수 있다는 사실에도 불구하고 그렇지 않습니다. 각 부분에 의미가있는 코드입니다.

숫자는 당신이 산술하는 일입니다. 우편 번호는 그렇지 않습니다.

최소 필드 너비 전에 0을 배치합니다.

printf("%05d",zipcode);

Zipcode는 고도로 현지화 된 분야이며, 많은 국가에서 우편 번호 (예 : 영국, 캐나다)에 캐릭터가 있습니다. 따라서이 예에서는 문자열/varchar 필드를 사용하여 언제든지 다른 국가에서 사용자/고객/고객/등을 배송하거나받는 경우 저장해야합니다.

그러나 일반적인 경우 권장 답변을 사용해야합니다 (printf("%05d", number);).

당신이 *nix 머신에 있다면 :

man 3 printf

여기에는 다음과 유사한 수동 페이지가 표시됩니다.

0 값은 패딩되지 않아야합니다. d, i, o, u, x, x, a, a, a, e, 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);

우편 번호를 캐릭터 문자열로 저장하면 숫자가 아닌 숫자가 아닌 장기적으로 스스로를 절약 할 수 있습니다.

더 유연합니다. 여기에는 고정 너비와 공간 패딩이있는 오른쪽 정당화 숫자의 행을 인쇄합니다.

//---- Header
std::string getFmt ( int wid, long val )
{  
  char buf[64];
  sprintf ( buf, "% *ld", wid, val );
  return buf;
}
#define FMT (getFmt(8,x).c_str())

//---- Put to use
printf ( "      COUNT     USED     FREE\n" );
printf ( "A: %s %s %s\n", FMT(C[0]), FMT(U[0]), FMT(F[0]) );
printf ( "B: %s %s %s\n", FMT(C[1]), FMT(U[1]), FMT(F[1]) );
printf ( "C: %s %s %s\n", FMT(C[2]), FMT(U[2]), FMT(F[2]) );

//-------- Output
      COUNT     USED     FREE
A:      354   148523     3283
B: 54138259 12392759   200391
C:    91239     3281    61423

함수와 매크로는 printf를 더 읽을 수 있도록 설계되었습니다.

zipcode를 문자 배열 zipcode []에 저장 해야하는 경우 다음을 사용할 수 있습니다.

snprintf( zipcode, 6, "%05.5d", atoi(zipcode));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top