2012-08-13 94 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