Reputation: 8068
I have set up an NSNumberFormatter
as follows:
formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
[formatter setGroupingSize:3];
However, I want to amend it so that it doesn't show decimal places for values 100,000 or greater. Is this possible without creating another formatter?
Upvotes: 1
Views: 2725
Reputation: 7410
If you want to truncate the decimal value of big numbers (print 324,329 instead of 324,329.12), here is what you can do.
Create a category on NSNumberFormatter
(New File > Objective-C Category), I called mine TruncateHigh
. This will create two files, NSNumberFormatter+TruncateHigh.h
and NSNumberFormatter+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
Usage in 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
Here is the log :
test[7050:11303] Small Number : 12,386.43
test[7050:11303] Big Number : 8,567,386
This will print numbers lesser than 100000 with 2 decimal numbers, and numbers greater with no decimal value. You can customize the code to get it to work exactly as you want it to.
Let me know if something's missing.
Upvotes: 2