numberFromString 的 NSNumberFormatter 问题

Posted

技术标签:

【中文标题】numberFromString 的 NSNumberFormatter 问题【英文标题】:NSNumberFormatter issue with numberFromString 【发布时间】:2013-10-14 08:44:28 【问题描述】:

我在 NSString 上有一个使用这种方法的类别:

-(NSNumber *)numberValue

    if (!nfStr)
    
        nfStr = [[NSNumberFormatter alloc] init];
    

    NSLocale *current = [NSLocale autoupdatingCurrentLocale];

    [nfStr setLocale:current];
    [nfStr setDecimalSeparator:[current objectForKey:NSLocaleDecimalSeparator]];
    [nfStr setGroupingSeparator:[current objectForKey:NSLocaleGroupingSeparator]];

    return [nfStr numberFromString:self];

我当前的语言环境是it-IT(小数分隔符:“,”分组分隔符:“.”)

当我将 stringFromNumber 与 NSNumber 90000 一起使用时,NumberFormatter 返回格式正确的字符串“90.000”

当我在文本字段中写入字符串“90.000”时,NumberFormatter 返回 nil 而不是 NSNumber 90000

为什么?

谢谢

编辑: 文本字段委托

-(void)textFieldDidEndEditing:(UITextField *)textField

  myObject.r.qtaOm = [Trim(textField.text) numberValue];

【问题讨论】:

你能贴出你如何在文本字段中使用它的代码吗? 已发布,是 textfield delgate 即使使用文本字段,它也适用于我 - 什么是 Trim 宏 - 也许不用它试试? 【参考方案1】:

您必须在格式化程序上设置NumberStyle。

[nfStr setNumberStyle:NSNumberFormatterDecimalStyle];

你可以使用:

enum 
   NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
   NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
   NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
   NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
   NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
   NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle
;

【讨论】:

【参考方案2】:

Lools 喜欢你的字符串格式不正确,因为 numberfromstring 方法接受字符串然后返回数字,但在你的情况下 90.000 似乎不是一个有效的字符串 所以尝试像这样通过并检查

 NSString *num=@"90.000"; 

然后检查它应该可以工作。

【讨论】:

以上是关于numberFromString 的 NSNumberFormatter 问题的主要内容,如果未能解决你的问题,请参考以下文章

NSNumberFormatter numberFromString 为货币样式格式化程序返回 0

使用新的 NSNumbeFormatter 时遇到问题

NSNumber 类型的托管属性?未初始化为零

将逗号添加到浮点数或字符串?

iOS 应用程序在手机上崩溃,但在模拟器上运行良好

如何将双精度值格式化为点后两位小数且分隔符为千位的字符串?