Obj-C,iOS,如何为国际货币格式化UITextField?

时间:2011-05-01 17:32:05

标签: objective-c ios uitextfield

我需要格式化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;

}

2 个答案:

答案 0 :(得分:4)

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];

NSString *currencyString = [formatter stringFromNumber:yourNumberHere];

当你输入任何货币时,你会试图让它变得正确。您必须使用UITextField委托方法

  • (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

拦截更改,然后尝试使用格式化程序将新字符串转换回数字。但是,如果他们做了混淆格式化程序解析的事情,例如删除货币符号或跳过逗号,则可能无效。

那么你将不得不尝试手动解析所有货币的数字。

如果你只是在编辑时省略货币格式,然后在结束时格式化结果,那就容易多了。

答案 1 :(得分:3)

使用NSNumberFormatter。使用NSNumberFormatterCurrencyStyle会将格式化程序设置为当前区域设置。您还可以将区域设置更改为某些内容。