1

我设置NSNumberFormatter如下:

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

但是,我想对其进行修改,使其不显示 100,000 或更大的值的小数位。在不创建另一个格式化程序的情况下这可能吗?

4

1 回答 1

2

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

NSNumberFormatter在(New File > Objective-C Category)上创建一个类别,我称之为 mine 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 个十进制数字,以及大于没有十进制值的数字。您可以自定义代码以使其完全按照您的意愿工作。

让我知道是否缺少某些东西。

于 2013-06-27T10:21:31.277 回答