iOS从NSNumberFormatter字符串中获取值

时间:2012-02-11 13:32:29

标签: ios nsnumberformatter

我正在使用以下代码将文本字段中输入的数字转换为格式化以显示美元货币。所以它显示了$符号,并且每3位数(从右边)a添加。我在文本字段中设置了格式化文本。

- (void)textFieldDidEndEditing:(UITextField *)textField
{
   NSString *pureNumbers = [[textField.text componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

    //Convert entered text to NSNumber
    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber * myNumber = [f numberFromString:pureNumbers];

    NSString *currencyString = [currencyFormatter internationalCurrencySymbol]; 

    NSString *format = [currencyFormatter positiveFormat];
    format = [format stringByReplacingOccurrencesOfString:@"*" withString:currencyString];
    // ¤ is a placeholder for the currency symbol
    [currencyFormatter setPositiveFormat:format];

    NSString *currencyString1 = [currencyFormatter stringFromNumber:myNumber];

    NSLog(@"Text is %@",currencyString1);

    textField.text = currencyString1;
}

现在我怎样才能得到删除数字格式化程序后输入的数字? 例: 我在文本字段中输入了5000。它在文本字段中格式化为$ 5,000。 我想从文本字段返回“5000”,这是用户输入的原始值。

2 个答案:

答案 0 :(得分:1)

我猜你从某个地方复制并粘贴了大部分格式化函数而不是自己编写,因为它已经包含了执行此操作的代码。在第一行你说:

NSString *pureNumbers = [[textField.text componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

这会占用一个字符串并删除任何非数字字符。所以这已经完全符合您的要求。例如。如果你说

NSString *pureNumbers = [@"$5,000" componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

pureNumbers字符串现在等于@“5000”。要将其转换为您可以实际使用的数值,您可以说:

double number = [pureNumbers doubleValue];

答案 1 :(得分:0)

您可以使用leftView的{​​{1}}属性:

UITextField

然后只检索文本。无需转换或字符串操作。