Xcode 将计算值转换为十进制并保存为核心数据

Xcode 将计算值转换为十进制并保存为核心数据,xcode,core-data,casting,Xcode,Core Data,Casting,我对iphonedev还不熟悉,所以这似乎是一个非常愚蠢的问题,但我如何才能将计算值保存到核心数据中呢 背景 这个程序只是根据用户输入到文本字段中的内容计算一个值。我将它们的数据类型设置为NSStrings,当保存到核心数据时,一切正常。 我将nsstring转换为float,并执行适当的数学运算,以得出最终的计算值。该最终值不会输出到文本字段,而是保存在核心数据中。我一直在同一行中遇到这两个错误:“‘double’传递给不兼容类型‘NSString’的参数,以及‘从不兼容类型‘double’分

我对iphonedev还不熟悉,所以这似乎是一个非常愚蠢的问题,但我如何才能将计算值保存到核心数据中呢

背景 这个程序只是根据用户输入到文本字段中的内容计算一个值。我将它们的数据类型设置为NSStrings,当保存到核心数据时,一切正常。 我将nsstring转换为float,并执行适当的数学运算,以得出最终的计算值。该最终值不会输出到文本字段,而是保存在核心数据中。我一直在同一行中遇到这两个错误:“‘double’传递给不兼容类型‘NSString’的参数,以及‘从不兼容类型‘double’分配给‘NSString*’”(第10行是包含这些消息的一行)

*就在我发布此代码之前,我尝试将第7行更改为

NSString finalPrice=totalPrice/totalPercentage

这导致第10行上的上述错误消失,但在第7行上导致错误:“接口类型无法静态分配。” 这太令人困惑了。我不明白为什么我的所有其他文本字段都保存到核心数据中,但这个计算字段不会。 如果你们能给我任何帮助,我将不胜感激。 :)

编辑 所以我现在实际上从
NSLog(@“%@”,dataModel.finalPrice)中得到了一个数字已设置,但值为wayyyy off。似乎数学计算不正确:

1     int dollar1 = [self.dataModel.price          intValue];
2     int P1      = [self.dataModel.percentage     intValue];
3     int dollar2 = [self.dataModel.price2          intValue];
4     int P2      = [self.dataModel.percentage2    intValue];

5     int totalPrice = dollar1 + dollar2;
6     int totalPercentage = P1 + P2;

7     int finalPrice = totalPrice / ((double)totalPercentage);
8     NSDecimalNumber *finalFinalPrice = [[NSDecimalNumber alloc]initWithDouble:finalPrice];

9     //Set final price to save in core data
10     NSLog(@"setting finalPrice to core data slot");
11    dataModel.finalPrice = finalFinalPrice;
我添加这些NSLog是为了查看核心数据中保存的内容

NSLog(@"%@", dataModel.price);
NSLog(@"%@", dataModel.percentage);    
NSLog(@"%@", dataModel.price2);
NSLog(@"%@", dataModel.percentage2);
NSLog(@"%@", dataModel.finalPrice);
一切似乎都很好,但例如,如果我有:

3.62 = dollar1;
2.2  = P1;
5.30 = dollar2;
.21  = P2;
totalPrice = dollar1 + dollar2; <--this should equal 8.92
totalPercentage = P1 + P2; <--this should equal 2.41
finalPrice = totalPrice / totalPercentage; <--- this should equal 3.70
哇。这真是太糟糕了。我真不敢相信最终的解决方案竟如此简单!
再次感谢你的帮助

如果要将
浮点值存储为
NSString
,请使用

编辑

你的更正:

NSString finalPrice = totalPrice / totalPercentage;
有一些问题。首先,无法静态分配错误
接口类型
的原因是
NSString
s需要动态分配(作为指针),并且您没有使用指针类型(
NSString*


其次,
totalPrice
totalPercentage
float
值,您将它们除以并设置为一个
NSString
,这是一种非常不同的数据类型。

如果您想将
float
值存储为
NSString
,请使用

编辑

你的更正:

NSString finalPrice = totalPrice / totalPercentage;
有一些问题。首先,无法静态分配错误
接口类型
的原因是
NSString
s需要动态分配(作为指针),并且您没有使用指针类型(
NSString*


其次,
totalPrice
totalPercentage
float
值,您将它们除以并设置为一个
NSString
,这是一种非常不同的数据类型。

谢谢谢谢谢谢多凯。看来我有点越界了。虽然我不再收到任何错误消息,但计算值没有显示在我应用程序另一个区域的另一个文本字段中。我使用了
NSLog(@“%@,[finalPrice text])
查看是否有任何内容被保存,结果表明,尽管其他所有内容都保存在核心数据中,但最终定价并没有保存在核心数据中。您知道为什么现在会发生这种情况吗?您在数据模型中为
finalPrice
发送了什么类型的数据?这可能意味着
round(totalPrice/totalPercentage)
没有返回有效值。在将finalPrice的值放入字符串之前,请尝试调试它。我编辑了我的问题,以避免阻塞评论部分。谢谢多凯。看来我有点越界了。虽然我不再收到任何错误消息,但计算值没有显示在我应用程序另一个区域的另一个文本字段中。我使用了
NSLog(@“%@,[finalPrice text])
查看是否有任何内容被保存,结果表明,尽管其他所有内容都保存在核心数据中,但最终定价并没有保存在核心数据中。您知道为什么现在会发生这种情况吗?您在数据模型中为
finalPrice
发送了什么类型的数据?这可能意味着
round(totalPrice/totalPercentage)
没有返回有效值。在将finalPrice的值放入字符串之前,请尝试调试它。为了不阻塞注释部分,我编辑了我的问题。在第一个示例中,您使用的是
float
值,但在第二个示例中,您使用的是
int
。您应该坚持使用
float
still,并为此提供NSLog输出。因此,finalPrice的NSLog返回
null
,这导致finalFinalPrice的NSLog返回
NaN
在第一个示例中,您使用的是
float
值,但在第二个示例中,您使用的是
int
。您应该坚持使用
float
still,并为此提供NSLog输出。因此,finalPrice的NSLog返回
null
,这导致finalFinalPrice的NSLog返回
NaN
...
double finalPrice = round(totalPrice / totalPercentage);
NSString *finalPriceString = [NSString stringWithFormat:@"%0.2f", finalPrice];

dataModel.finalPrice = finalPriceString;
NSString finalPrice = totalPrice / totalPercentage;