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 转换为字节数组?