【问题标题】:iOS: NSNumberFormatter doesn't convert string back to NSNumberiOS:NSNumberFormatter 不会将字符串转换回 NSNumber
【发布时间】:2013-07-23 18:38:04
【问题描述】:

我正在使用以下 NSNumberFormatter 在货币值中添加逗号和符号。

self.currencyFormatter = [NSNumberFormatter new];
self.currencyFormatter.numberStyle = NSNumberFormatterCurrencyStyle;
self.currencyFormatter.currencySymbol = @"£";
self.currencyFormatter.currencyCode = @"GBP";
self.currencyFormatter.roundingMode = NSNumberFormatterRoundHalfUp;
self.currencyFormatter.maximumFractionDigits = 0;

用法:

self.principleAmountTextField.text = [self.currencyFormatter stringFromNumber:[NSNumber numberWithInteger:100000]];

这显示了预期的 100,000 英镑。现在,如果我在文本字段中再插入两个数字(文本变为 100,00096 英镑)并尝试将字符串转换为整数,我得到 0!基本上下面的行返回 0。我不知道如何处理这个问题。

NSLog(@"%d", [[self.currencyFormatter numberFromString:@"£100,00096"] integerValue]);

仅供参考,我对文本字段有自定义输入视图,它只允许数字输入文本字段。在 Did Edit End 中,即使我格式化数字并用逗号显示。

【问题讨论】:

  • £100,00096 不是有效数字。 £10,000,096£10000096 一样。
  • ....但是当用户输入数字时我不能放逗号!是否有数字在输入时自动转换为所需格式?
  • 如果用户可以输入无效值,您需要在尝试转换之前从字符串中删除任何分组字符。

标签: ios textfield nsnumberformatter


【解决方案1】:

您需要删除逗号才能使其正常工作,您仍然可以在文本字段中显示它们,但您应该在将字符串传递给格式化程序之前将它们去掉。像这样的:

NSString *userInput = @"£100,00096";    
userInput = [userInput stringByReplacingOccurrencesOfString:@"," withString:@""];
NSLog(@"%ld", (long)[[currencyFormatter numberFromString:userInput] integerValue]);

【讨论】:

  • 不要将逗号硬编码到代码中。根据用户的语言环境,可以使用不同的字符。最好从数字格式化程序中获取分组字符。
【解决方案2】:

100,00096 不正确...

你是指其中之一吗?

[[self.currencyFormatter numberFromString:@"£10000096"] integerValue]
[[self.currencyFormatter numberFromString:@"£100,000.96"] integerValue]
[[self.currencyFormatter numberFromString:@"£100000.96"] integerValue]
[[self.currencyFormatter numberFromString:@"£10,000,096"] integerValue]

【讨论】:

  • ...不,当用户输入他们只是附加的号码时。例如,您已经在文本字段中有 100,000 英镑。现在他们开始输入数字,它将附加为 100,000 英镑 + 输入的任何内容。他们可以只输入数字而不是逗号。在 didEditEnd 我正在格式化数字。
  • 当然可以,但是当用户输入数字时,您需要重新格式化显示的内容。 100,00096 不是显示任何数字的正确方式。
【解决方案3】:

我的最终代码供参考。带有货币符号的数字也是无效的!跟随会照顾一切。

    NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:[NSString stringWithFormat:@"%@%@", self.currencyFormatter.groupingSeparator, self.currencyFormatter.currencySymbol]];
    self.amountTextField.text = [[self.amountTextField.text componentsSeparatedByCharactersInSet:doNotWant] componentsJoinedByString:@""];
    self.amountTextField.text = [NSString stringWithFormat:@"£%@", self.amountTextField.text];
    NSUInteger amount = [[self.currencyFormatter numberFromString:self.amountTextField.text] integerValue];
    self.amountTextField.text = [self.currencyFormatter stringFromNumber:[NSNumber numberWithInteger:amount]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2016-12-11
    • 2020-03-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多