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

C++ 如何在整数的右边用零填充整数?,c++,objective-c,ios,cocoa-touch,C++,Objective C,Ios,Cocoa Touch,我知道用零填充一个整数,我可以做如下操作 NSString*版本=[NSString stringWithFormat:@“%03d”,appVersion.intValue] 如果需要,这将在整数的左边加上最多3个零。然而,我想做同样的事情,但不是填充到左边,我需要填充到右边 我如何用零填充整数,但要在整数的右边?(理想情况下,与上述方法具有类似的简单性) 这是我需要的一个例子 如果整数结果是38,我需要版本字符串显示为380(只在整数末尾添加了一个零,因为我希望最大值为三个字符,如果整数小于

我知道用零填充一个整数,我可以做如下操作

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

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

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

这是我需要的一个例子

如果整数结果是38,我需要版本字符串显示为380(只在整数末尾添加了一个零,因为我希望最大值为三个字符,如果整数小于三个字符,则添加零使其成为三个)

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


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

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

NSString *version = [NSString stringWithFormat:@"%ld", ((long)appVersion.intValue)*1000];
如果您需要整数的长度(以数字为单位),在决定乘以某个十的因数之前,请取该值的小数
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*因子
12300
。您可以根据自己的情况根据需要进行调整。测试边界,这样你就不会得到奇怪的结果。

你能把这个值乘以1000,然后打印出来吗?如果需要大量的零,通常可能需要在相乘之前将
int
提升为
long
long
,以降低溢出的可能性

NSString *version = [NSString stringWithFormat:@"%ld", ((long)appVersion.intValue)*1000];
char buf[4];
int len = sprintf(buf, "%u", 38);
while (len < 3)
    buf[len++] = '0';
buf[len] = '\0';
如果您需要整数的长度(以数字为单位),在决定乘以某个十的因数之前,请取该值的小数
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*因子
12300
。您可以根据自己的情况根据需要进行调整。测试边界,这样你就不会得到奇怪的结果。

charbuf[4];
char buf[4];
int len = sprintf(buf, "%u", 38);
while (len < 3)
    buf[len++] = '0';
buf[len] = '\0';
int len=sprintf(buf,“%u”,38); while(len<3) buf[len++]='0'; buf[len]='\0';
您可能更喜欢
sprint\u s
而不是
sprintf
。如果你真的有妄想症,请检查从
sprintf
返回的值是否为负值; int len=sprintf(buf,“%u”,38); while(len<3) buf[len++]='0'; buf[len]='\0';

您可能更喜欢
sprint\u s
而不是
sprintf
。如果你真的有妄想症,请检查从
sprintf
返回的值是否为负值。

除非已知并固定了位数,否则此方法将需要一些额外的条件将其格式化为OP想要的大小/长度。但这是一种方法,这个方法的问题是,包括整数在内,最多需要三个字符。例如,如果整数最终是38,那么当我需要380时,你的方法给我38000。同样,如果整数最终是381,那么输出应该是381。在这种情况下,不需要用零填充,因为我最多需要三个字符。我编辑了我的答案以解决这一点。您只需选择适合您需要的
totalDesiredLength
值。一定要检查边界。嗨,谢谢你的回答,它看起来非常优雅和简单。但是,边界测试是什么意思?请确保NumberOfZerofsRequired为正数,确保选择的类型不会与正在使用的值溢出,等等。除非已知并固定了位数,否则此方法将需要一些额外的条件来将其格式化为OP想要的大小/长度。但这是一种方法,这个方法的问题是,包括整数在内,最多需要三个字符。例如,如果整数最终是38,那么当我需要380时,你的方法给我38000。同样,如果整数最终是381,那么输出应该是381。在这种情况下,不需要用零填充,因为我最多需要三个字符。我编辑了我的答案以解决这一点。您只需选择适合您需要的
totalDesiredLength
值。一定要检查边界。嗨,谢谢你的回答,它看起来非常优雅和简单。但是,边界测试是什么意思?确保numberOfZeroesNeeded为正,确保选择的类型不会溢出正在使用的值,等等。如果
buf
需要长于或短于三个字符(没有空字符),那么您会遇到另一个问题,可能会有不同的答案。但答案很简单:尽可能大。如果
buf
需要长于或短于三个字符(不含空字符),那么您会遇到不同的问题,可能会有不同的答案。但答案很简单:尽可能大。