2014-04-29 39 views
0

我得到一個NSInteger,看起來像「8444」。我想以下面的方式顯示它「84.44」。 如果整數看起來像「84455」,那麼它應該看起來像「844.55」。如果它是「85544433」,那麼它應該看起來像「855.444.33」。iOS:我想添加「。」到一個NSInteger並將其顯示爲NSString

有什麼建議嗎?我想使用NSStringWithFormat但我不知道要提供哪些標籤。

+0

在第三種情況下,你的意思是855,444.33?你是否關心組分隔符所在的語言環境?和小數點分隔符是。 - 即。 855.444,33?確切地說, – Paulw11

+0

。我更喜歡國際標準(它使用「。」分隔值和「,」爲小數位),但在美國工作方式相反。因此,我試圖有一個任意的方式來本地化顯示的值以及嘗試如何格式化NSInteger) – mm24

+0

這是'NSNumberFormatter'的用途,像1000這樣的數字將顯示爲1,000或1.000或1 000到用戶的地區 – rmaddy

回答

2

可以修改實際上,如果您允許iOS檢測正確的語言環境並應用相應的格式,則會更好根據http://en.wikipedia.org/wiki/Decimal_mark,t可以從一個國家到另一個國家變化很大。

在您的例子中,你使用的是NSInteger的,但我猜測,在最後2個數字是小數部分,如果是的話,你可以這樣來做,並保持現場的一致性:

NSInteger integer = 8444; 
// Convert integet to decimal 
NSNumber *number = [NSNumber numberWithFloat:((float)integer/100)]; 
// Create formatter 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
// Conver number to string 
NSString *str = [formatter stringFromNumber:number]; 

到代碼將使用iOS上配置的語言環境,但如果你想迫使一個具體情況,你可以在轉換前將這些行做到這一點:

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[formatter setLocale:locale]; 
+1

謝謝!作品像魅力一樣,增加了「!= 0」檢查,正如其他答案中建議的那樣 – mm24

1

明白了:

- (NSString *)formattedStringFromInteger:(NSInteger)number { 
    NSString *result = @"0"; 
    if (number != 0) { 
     NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
     numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; 
     numberFormatter.groupingSeparator = @"."; 
     NSString *string = [numberFormatter stringFromNumber:@(number * 10)]; 
     result = [string substringToIndex:string.length - 1]; 
    } 
    return result; 
} 

8444 - > 84.44
101 - > 1.01
10100000 - > 101.000.00
0 - > 0

+0

好的解決方案+1,如果我可以給你加2但我不得不接受使用本地化系統的另一個,但是我在解決方案中加入了「!= 0」檢查 – mm24

相關問題