缩短NSDecimalNumber中的字符串,其中K表示数千,而M表示数百万等

时间:2012-09-27 13:33:02

标签: iphone ios rounding nsnumber nsdecimalnumber

  

可能重复:
  Convert int to shortened, formatted string

我想将NSDecimalNumber的值转换为字符串,其中:

5到6位数字用K代表数千,有3位有效数字(例如54,321 ---> 54.3K,654,321 ---> 65.4K)

7到9位数字用M表示数百万,有3位有效数字(例如7,654,321 ----> 7.65M,987,654,321 ---> 9.88M)

10位数字及以上使用B表示数十亿,并且有3位有效数字

有关最佳方法的任何建议吗?感谢。

(看到一些类似的问题,但不是Objective-C / iOS的问题。)

1 个答案:

答案 0 :(得分:0)

FormatterKit可以格式化位,字节,兆字节等。请参阅TTTUnitOfInformationFormatter类。

示例:

将TTTUnitOfInformationFormatter.h和TTTUnitOfInformationFormatter.m添加到您的项目中。以下示例代码将数字12345格式化为字节数:

#import "TTTUnitOfInformationFormatter.h"

NSDecimalNumber *numberOfBytes = [NSDecimalNumber
                                  decimalNumberWithString:@"12345"];
TTTUnitOfInformationFormatter *formatter = [[TTTUnitOfInformationFormatter alloc]
                                            init];
// Set this to NO if you want to show bits instead of bytes.
formatter.displaysInTermsOfBytes = YES;
// Set this to YES if you want 1024 bytes in a KB instead of 1000 bytes.
formatter.usesIECBinaryPrefixesForCalculation = NO;
NSString *formatted = [formatter stringFromNumber:numberOfBytes
                                           ofUnit:TTTByte];
NSLog(@"%@", formatted);

它将打印:

12.35 KB

如果您想要“K”而不是“KB”,“B”而不是“GB”等,您仍然可以使用此课程作为起点。