2012-08-13 92 views
1

我知道要用零填充一个整数,我可以执行以下操作:如何用零填充整数的右边的整数?

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

如果需要,这会在整数的左边加上3个零。不过,我想这样做,但不是填充左边,我需要在右边填充。

我该如何用零填充一个整数,但在整数的右边? (与简单类似上述方法在理想情况下)

这里是什么,我需要一个例子,

如果整数原来是38,我需要的版本字符串出来为380(仅一个零被添加到整数的末尾,因为我想要最多三个字符,如果整数小于三个字符,将添加零以使其为三)。

我目前使用会给我038的方法,我需要380

或者,如果该整数为381,那么输出应该是381,因为我只想三字的最大值。

回答

5

你可以乘以1000,然后打印?如果您需要大量的零,您可能通常希望在乘以之前将int升至longlong long以减少溢出的可能性。

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

如果需要int的位数长度,决定由十一些因素相乘之前,取值的小数logfloor再加一。例如:

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 * factor12300。您可以根据需要调整您的情况。测试边界,以便最终不会出现奇怪的结果。

+0

除非数字的数量已知并且是固定的,否则此方法将需要一些额外条件来将其格式化为OP所需的大小/长度。但这是一条路。 – jweyrich 2012-08-13 17:55:05

+0

这种方法的问题是我最多需要三个字符,包括整数。因此,例如,如果整数结果是38,那么当我需要380时,你的方法会给我38000。同样,如果整数结果是381,那么输出应该是381,在这种情况下不需要用零填充,因为我有最大值我需要三个角色。 – gossainapps 2012-08-13 18:06:22

+0

我编辑了我的答案来解决这一问题。你只需要选择适合你需要的'totalDesiredLength'的值。一定要检查边界。 – 2012-08-13 18:15:26

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

你可能更喜欢sprint_s而不是sprintf。如果你真的偏执,请检查从sprintf返回的值是否定的。

+0

如果'buf'需要长于或短于三个字符(没有空字符)会怎么样? – 2012-08-13 21:08:20

+0

然后你有一个不同的问题,这可能有不同的答案。但答案很简单:尽可能地扩大你的需求。 – 2012-08-13 21:22:21