Ios N小数

Ios N小数,ios,core-data,nsdecimalnumber,Ios,Core Data,Nsdecimalnumber,在EditViewController中保存NSDecimalNumber时,在DisplayTableViewController中显示值NaN 请需要建议来解决这个问题。谢谢 我的代码: - (IBAction)saveChanges:(id)sender { editGift.nameOfGift = nameTextField.text; editGift.priceOfGift = [NSDecimalNumber decimalNumberWithString:pri

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];
}

输入值:

currencyFormatter = [[NSNumberFormatter alloc]init]; 

[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

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

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

NSDecimalNumber文档说明:

除数字外,数字字符串还可以包括首字母“+”或“–”;一个单独的“E”或“E”,表示科学记数法中数字的指数;和一个NSDecimalSeparator,用于将分数与整数部分分开

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

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

输入值是什么,即什么是
priceTextField.text
?输入值:currencyFormatter=[[NSNumberFormatter alloc]init];[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];personGift.priceOfGift=[NSDecimalNumber decimalnumberwhithstring:priceTextField.text];ur输入值未格式化为NSDecimalNumber,因此给出NaN。检查输入!记录textfield值,然后将其放入NSDecimalNumber并过账;)我的意思是什么是
pricefield.Text
的值,而不是什么是其他代码?我相信Rob在这里说的是导致您出现问题的原因。当您获取包含“$”符号的文本值时。当用户单击“保存”时,从
priceTextField.text中删除您的$-符号。就像一个警长一样。您还可以检查无效的数字。像'1.2.3.4..00'非常感谢Rob和Christer,我如何从textfield中删除$-符号?您已经有了一个货币编号格式化程序。使用numberFromString:将文本转换为
NSNumber
。理想情况下,您应该使用
setGeneratesDecimalNumbers:
,这样您就可以得到一个十进制数。曾经有一个bug阻止它像你希望的那样容易工作,但希望到现在它已经被修复了(已经好几年了)。看见