NSDecimalNumber 出现 NaN

Posted

技术标签:

【中文标题】NSDecimalNumber 出现 NaN【英文标题】:NSDecimalNumber appear NaN 【发布时间】:2012-12-19 13:30:29 【问题描述】:

EditViewController中保存NSDecimalNumber时,DisplayTableViewController中的值出现NaN

请寻求建议来解决此问题。谢谢

我的代码:

- (IBAction)saveChanges:(id)sender 
    editGift.nameOfGift = nameTextField.text;
    editGift.priceOfGift = [NSDecimalNumber decimalNumberWithString:priceTextField.text];

    AppDelegate *myApp = (AppDelegate *) [[UIApplication sharedApplication]delegate];
    [myApp saveContext];
    [self.delegate editGiftViewControllerDidSave:self];

Please watch video explanation

输入值:

currencyFormatter = [[NSNumberFormatter alloc]init]; 

[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

 personGift.priceOfGift = [NSDecimalNumber decimalNumberWithString:priceTextField.text];

【问题讨论】:

输入值是什么,即priceTextField.text是什么? 输入值:currencyFormatter = [[NSNumberFormatter alloc]init]; [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; personGift.priceOfGift = [NSDecimalNumber decimalNumberWithString:priceTextField.text]; 您的输入值未格式化为 NSDecimalNumber,因此给出了 NaN。检查输入!在将文本字段值放入 NSDecimalNumber 并发布之前记录它;) 我的意思是pricefield.Text 的值是什么,而不是其他代码是什么? 【参考方案1】:

您的代码不清楚何时应用货币格式,但鉴于您的视频,文本字段的值很可能是“$6,000”。这不是一个数字(因此是“NaN”)。

【讨论】:

我相信 Rob 在这里所说的是导致您的问题的原因。当您获得包含“$”符号的文本值时。当用户单击保存时,从priceTextField.text 中删除您的 $ 符号。就像抬头一样。您还可以检查无效号码。比如'1.2.3.4..00' 非常感谢 Rob 和 Christer,如何从文本字段中删除 $-sign? 您已经有了一个方便的货币数字格式化程序。使用 numberFromString: 将文本转换为 NSNumber。理想情况下,您应该使用setGeneratesDecimalNumbers: 以便得到一个十进制数。曾经有一个错误阻止它像您想要的那样轻松工作,但希望现在它已经修复(已经好几年了)。见***.com/questions/317311/…【参考方案2】:

NSDecimalNumber 文档说:

除了数字之外,numericString 还可以包含开头的“+”或“–”;单个“E”或“e”,以科学计数法表示数字的指数;和一个单独的 NSDecimalSeparator 来将小数部分与数字的整数部分相除。

您必须验证priceTextField.text 中的字符串是否仅包含有效字符 - 并且顺序有效。特别要检查的一件事是您是否有小数点或小数点逗号,具体取决于用户区域设置。因此,您可能需要考虑使用:

+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString
locale:(NSDictionary *)locale

【讨论】:

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

如果 NSDecimalNumber 大于 Uint64,如何将 NSDecimalNumber 转换为字节数组?

将 NSDecimalNumber 变为负数

为啥来自 NSString 分配的 NSDecimalNumber 会失败?

NSDecimalNumber 比较失败

对 NSDecimalNumber 有点困惑?

在 NSDecimalNumber 的索引处查找数字