我想将我的号码格式化为货币字符串.这些是以下情况
25.00 => $25 25.43 => $25.43 25.4 => $25.40 0.00 -> $0
有没有办法在NSNumberFormatter中执行此操作?
这是我现在的代码:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; [fmt setNumberStyle:NSNumberFormatterCurrencyStyle]; [fmt setCurrencyCode:@"USD"];
然而,我的第一个和最后一个例子失败了.
我也尝试过:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; [fmt setPositiveFormat:@"$0.##"];
然而,我的第三个案件失败了.有什么建议?
解决方法
我认为没有办法使用普通的NSNumberFormatter来做到这一点.您可以将最小和最大小数位数设置为0,仅用于格式化NSNumberFormatter子类中的整数:
@interface MyCurrencyFormatter : NSNumberFormatter @end @implementation MyCurrencyFormatter - (id)init { if ((self = [super init])) { [self setNumberStyle:NSNumberFormatterCurrencyStyle]]; [self setCurrencyCode:@"USD"]; } return self; } - (NSString *)stringFromNumber:(NSNumber *)aNumber { NSInteger minimumFractionDigits = [self minimumFractionDigits]; NSInteger maximumFractionDigits = [self maximumFractionDigits]; if ([self isInteger:aNumber]) { [self setMinimumFractionDigits:0]; [self setMaximumFractionDigits:0]; } NSString *formattedNumber = [super stringFromNumber:aNumber]; [self setMinimumFractionDigits:minimumFractionDigits]; [self setMaximumFractionDigits:maximumFractionDigits]; return formattedNumber; } - (BOOL)isInteger:(NSNumber *)aNumber { NSDecimal decimalValue = aNumber.decimalValue; NSDecimalRound(&decimalValue,&decimalValue,NSRoundDown); NSDecimalNumber *roundedValue = [[NSDecimalNumber alloc] initWithDecimal:decimalValue] return [aNumber isEqualToNumber:roundedValue]; } @end
这也应该处理国际号码格式.
归功于this post以确定数字是否为整数.