我需要格式化UITextField中的数值,该数值将在输入数字时格式化。我需要价值来格式化国际价格,具体取决于手机的货币设置。
帮助!
编辑,这就是我现在所拥有的,在美国和英国有效,但却导致我与欧元等其他货币出现问题。
+(NSString*)addFormatPrice:(double)dblPrice {
NSNumber *temp = [NSNumber numberWithDouble:dblPrice];
NSDecimalNumber *someAmount = [NSDecimalNumber decimalNumberWithDecimal:
[temp decimalValue]];
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init]
autorelease];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
return [currencyFormatter stringFromNumber:someAmount];
}
+(double)removeFormatPrice:(NSString *)strPrice {
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init]
autorelease];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber* number = [currencyFormatter numberFromString:strPrice];
return [number doubleValue];
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:
(NSRange)range replacementString:(NSString *)string {
double currentValue = [General removeFormatPrice:textField.text];
double cents = round(currentValue * 100.0f);
if (([string isEqualToString:@"."]) && ((int)currentValue == 0)) {
cents = floor(cents * 100);
} else if ([string length]) {
for (size_t i = 0; i < [string length]; i++) {
unichar c = [string characterAtIndex:i];
if (isnumber(c)) {
cents *= 10;
cents += c - '0';
}
}
} else {
// back Space
cents = floor(cents / 10);
}
NSString *str = [NSString stringWithFormat:@"%f", cents];
if ([str length] > 15) {
NSString *newStr = [str substringFromIndex:1];
cents = [newStr doubleValue];
}
textField.text = [General addFormatPrice:[[NSString
stringWithFormat:@"%.2f", cents / 100.0f] doubleValue]];
return NO;
}
答案 0 :(得分:4)
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSString *currencyString = [formatter stringFromNumber:yourNumberHere];
当你输入任何货币时,你会试图让它变得正确。您必须使用UITextField委托方法
拦截更改,然后尝试使用格式化程序将新字符串转换回数字。但是,如果他们做了混淆格式化程序解析的事情,例如删除货币符号或跳过逗号,则可能无效。
那么你将不得不尝试手动解析所有货币的数字。
如果你只是在编辑时省略货币格式,然后在结束时格式化结果,那就容易多了。
答案 1 :(得分:3)
使用NSNumberFormatter。使用NSNumberFormatterCurrencyStyle
会将格式化程序设置为当前区域设置。您还可以将区域设置更改为某些内容。