如何用整数右边的零填充整数?

时间:2012-08-13 17:50:00

标签: c++ objective-c ios cocoa-touch

我知道要用零填充整数,我可以执行以下操作,

NSString * version = [NSString stringWithFormat:@“%03d”,appVersion.intValue];

如果需要,这将在整数的左侧添加最多3个零。但是我想做同样的事情,但我不需要填充到左边,我需要向右填充。

如何用零填充整数但是在整数的右边? (理想情况下与上述方法类似)

这是我需要的一个例子,

如果整数结果为38,我需要将版本字符串作为380(在整数的末尾只添加一个零,因为我想要最多三个字符,如果整数小于三个将添加字符,零以使其成为三个。)

我目前使用的方法将给我038.我需要380。

或者如果整数是381,那么输出应该是381,因为我只想要最多三个字符。

2 个答案:

答案 0 :(得分:5)

您可以将该值乘以1000,然后打印出来吗?如果您需要大量的零,通常可能需要在乘法之前将int提升为longlong long,以减少溢出的可能性。

NSString *version = [NSString stringWithFormat:@"%ld", ((long)appVersion.intValue)*1000];

如果您需要数字int的长度,在决定乘以某个因子10之前,请取值的小数floor加{1}}。例如:

log

然后使用一些规则来决定要添加的零位数。

int foo = 123;
int digitsInFoo = floor(log10(foo)) + 1; /* 3 */

然后五位数的结果将是int totalDesiredLength = 5; int numberOfZeroesNeeded = totalDesiredLength - digitsInFoo; /* this assumes totalDesiredLength >= digitsInFoo */ int factor = (int) pow(10, numberOfZeroesNeeded); /* 100 */ foo * factor。您可以根据需要根据您的情况进行调整。测试边界,这样你就不会得到奇怪的结果。

答案 1 :(得分:0)

char buf[4];
int len = sprintf(buf, "%u", 38);
while (len < 3)
    buf[len++] = '0';
buf[len] = '\0';

您可能更喜欢sprint_s而不是sprintf。如果你真的是偏执狂,请检查sprintf返回的值是否为负数。