在C中打印前导0?
时间:2020-03-06 14:56:00 来源:igfitidea点击:
我试图找到一种打印前导0的好方法,例如邮政编码为01001. 虽然该数字将被存储为1001,但是执行此操作的好方法是什么?
我想使用任一种case语句/ if,然后找出数字的位数,然后将其转换为带有额外0的char数组以进行打印,但我忍不住想了想用我无法理解的printf格式语法。
解决方案
printf("%05d", zipCode);
printf允许使用各种格式选项。
前任:
printf("leading zeros %05d", 123);
我们在最小字段宽度之前放置零:
printf("%05d",zipcode);
如果我们在* NIX机器上:
man 3 printf
这将显示一个手册页,类似于:
0 The value should be zero padded. For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, the converted value is padded on the left with zeros rather than blanks. If the 0 and - flags both appear, the 0 flag is ignored. If a precision is given with a numeric conversion (d, i, o, u, x, and X), the 0 flag is ignored. For other conversions, the behavior is undefined.
即使问题是针对C的,此页面也可能会有所帮助。
sprintf(mystring, "%05d", myInt);
此处," 05"表示"使用5位数字和前导零"。
正确的解决方案是将邮政编码作为STRING存储在数据库中。尽管看起来可能像数字,但事实并非如此。这是一个代码,每个部分都有其含义。
数字是我们要进行算术运算的事情。邮政编码不是这样。
邮政编码是一个高度本地化的字段,许多国家/地区的邮政编码中都包含字符,例如英国,加拿大。因此,在此示例中,如果要在任何时候从其他国家/地区发货或者获取用户/客户/客户/客户等,则应使用字符串/ varchar字段进行存储。
但是在一般情况下,我们应该使用推荐的答案(printf("%05d",number);
)。
如果将邮政编码存储为字符串而不是数字而不是数字,则可以避免麻烦(长期)。