iOS 从 NSNumberFormatter 字符串中取回值

Posted

技术标签:

【中文标题】iOS 从 NSNumberFormatter 字符串中取回值【英文标题】:iOS Getting back value from NSNumberFormatter string 【发布时间】:2012-02-11 13:32:29 【问题描述】:

我正在使用以下代码将文本字段中输入的数字转换为格式化以显示美元货币。所以它显示了 $ 符号,并且每 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”,这是用户输入的原始值。

【问题讨论】:

提供示例,“输入的实际数字”含糊不清。 @CocoaFu,我提供了一个我所期待的例子。 当你的代码得到myNumber时,这不正是你的代码已经在做的吗? 【参考方案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];

【讨论】:

谢谢。这段代码是由某人编写的,我不明白写的是什么....在我将其发布到论坛之前,我将从现在开始活跃起来。再次感谢。【参考方案2】:

你可以使用UITextFieldleftView属性:

  UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 15, 15)];
    label.text = @"$";
    label.font = [UIFont systemFontOfSize:10];
    [label sizeToFit];
    textField.leftView = label;
    [self.view addSubview:textField];

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

【讨论】:

以上是关于iOS 从 NSNumberFormatter 字符串中取回值的主要内容,如果未能解决你的问题,请参考以下文章

NSNumberFormatter 仅在 ipad 设备上不显示卢比符号

NSNumberFormatter maximumFractionDigits 和 maximumSignificantDigits 错误

NSNumberFormatter 适用于小数分隔符但不适用于逗号分隔符

使用 NSNumberFormatter 和 RestKit 将 NSCFNumber 转换为 NSNumber 时出错

NSNumberFormatter paddingPosition 不起作用

在 Swift 中使用 NSNumberFormatter 格式化货币输入