我试图找到一个好方法打印前导0,如01001邮政编码。当这个数字被存储为1001时,什么是一个好方法呢?
我想过使用case语句或if来计算出数字是多少位,然后将其转换为带有额外0的字符数组进行打印,但我不禁想,可能有一种方法可以用printf格式语法来做到这一点,这是逃避我的。
我试图找到一个好方法打印前导0,如01001邮政编码。当这个数字被存储为1001时,什么是一个好方法呢?
我想过使用case语句或if来计算出数字是多少位,然后将其转换为带有额外0的字符数组进行打印,但我不禁想,可能有一种方法可以用printf格式语法来做到这一点,这是逃避我的。
当前回答
有两种方法输出前导为零的数字:
使用0标志和宽度说明符:
int zipcode = 123;
printf("%05d\n", zipcode); // Outputs 00123
使用精度说明符:
int zipcode = 123;
printf("%.5d\n", zipcode); // Outputs 00123
它们之间的区别在于负数的处理:
printf("%05d\n", -123); // Outputs -0123 (pad to 5 characters)
printf("%.5d\n", -123); // Outputs -00123 (pad to 5 digits)
邮政编码不太可能是负的,所以这无关紧要。
但是请注意,邮政编码实际上可能包含字母和破折号,因此它们应该存储为字符串。在字符串中包含前导零很简单,所以它以一种更简单的方式解决了问题。
注意,在上面的两个例子中,5个width或precision值可以指定为int参数:
int width = 5;
printf("%0*d\n", width, 123); // Outputs 00123
printf("%.*d\n", width, 123); // Outputs 00123
还有一个技巧需要知道:0的精度导致0的值没有输出:
printf("|%0d|%0d|\n", 0, 1); // Outputs |0|1|
printf("|%.0d|%.0d|\n", 0, 1); // Outputs ||1|
其他回答
邮政编码是一个高度本地化的字段,许多国家的邮政编码中都有字符,例如英国、加拿大。因此,在本例中,您应该使用一个string / varchar字段来存储它,如果您将从其他国家发送或获得用户、客户、客户等。
但是,在一般情况下,您应该使用推荐的答案(printf("%05d", number);)。
如果你需要将邮政编码存储在字符数组zipcode[]中,你可以使用这个:
snprintf(zipcode, 6, "%05.5d", atoi(zipcode));
有两种方法输出前导为零的数字:
使用0标志和宽度说明符:
int zipcode = 123;
printf("%05d\n", zipcode); // Outputs 00123
使用精度说明符:
int zipcode = 123;
printf("%.5d\n", zipcode); // Outputs 00123
它们之间的区别在于负数的处理:
printf("%05d\n", -123); // Outputs -0123 (pad to 5 characters)
printf("%.5d\n", -123); // Outputs -00123 (pad to 5 digits)
邮政编码不太可能是负的,所以这无关紧要。
但是请注意,邮政编码实际上可能包含字母和破折号,因此它们应该存储为字符串。在字符串中包含前导零很简单,所以它以一种更简单的方式解决了问题。
注意,在上面的两个例子中,5个width或precision值可以指定为int参数:
int width = 5;
printf("%0*d\n", width, 123); // Outputs 00123
printf("%.*d\n", width, 123); // Outputs 00123
还有一个技巧需要知道:0的精度导致0的值没有输出:
printf("|%0d|%0d|\n", 0, 1); // Outputs |0|1|
printf("|%.0d|%.0d|\n", 0, 1); // Outputs ||1|
如果将ZIP Code存储为字符串(它是字符串),而不是存储为数字(它不是字符串),您将为自己节省大量麻烦(长期而言)。
printf("%05d", zipCode);
0表示填充的内容,5表示整数的宽度。
例1:如果使用“%02d”(用于日期),则只会为个位列中的数字填充零。例如,用06代替6。
例2:“%03d”将为个位列中的一个数字填充2个零,为十位列中的一个数字填充1个零。例如,数字7被填充到007,数字17被填充到017。