NSNumberFormatter - 如何截断高值的小数位?

时间:2013-06-27 09:50:58

标签: ios objective-c nsnumberformatter

我已按如下方式设置NSNumberFormatter

formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
[formatter setGroupingSize:3];

但是,我想修改它,以便它不会显示100,000或更高值的小数位。如果没有创建另一个格式化程序,这可能吗?

1 个答案:

答案 0 :(得分:2)

如果要截断大数字的十进制值(打印 324,329 而不是 324,329.12 ),可以执行以下操作。

NSNumberFormatter(新文件> Objective-C类别)上创建一个类别,我称之为TruncateHigh。这将创建两个文件NSNumberFormatter+TruncateHigh.hNSNumberFormatter+TruncateHigh.m

NSNumberFormatter + TruncateHigh.h:

#import <Foundation/Foundation.h>

@interface NSNumberFormatter (TruncateHigh)

- (NSString *)customStringFromNumber:(NSNumber *)number;

@end

NSNumberFormatter + TruncateHigh.m:

#import "NSNumberFormatter+TruncateHigh.h"

@implementation NSNumberFormatter (TruncateHigh)

- (NSString *)customStringFromNumber:(NSNumber *)number {

    if (number.floatValue > 100000) {
        [self setMaximumFractionDigits:0];
    } else {
        [self setMaximumFractionDigits:2];
    }

    return [self stringFromNumber:number];
}

@end

在YourViewController.m中的用法:

#import "YourViewController.h"
#import "NSNumberFormatter+TruncateHigh.h"

@implementation YourViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [formatter setGroupingSize:3];

    NSNumber *smallNumber = [NSNumber numberWithFloat:12386.43];
    NSNumber *bigNumber = [NSNumber numberWithFloat:8567386.43];

    NSLog(@"Small Number : %@", [formatter customStringFromNumber:smallNumber]);
    NSLog(@"Big Number : %@", [formatter customStringFromNumber:bigNumber]);
}

@end

这是日志:

test[7050:11303] Small Number : 12,386.43
test[7050:11303] Big Number : 8,567,386

这将打印小于100000的数字,带有2个十进制数字,数字更大,没有小数值。您可以自定义代码,使其完全按照您的意愿工作。

如果遗漏了某些东西,请告诉我。