将计算值转换为十进制并保存到Core Data

时间:2012-07-12 23:02:52

标签: xcode core-data casting

我是iPhone开发人员的新手,所以这看起来似乎是一个非常愚蠢的问题,但我怎样才能将计算出的值保存到核心数据中呢?

背景 该程序只是根据用户输入的文本字段计算一个值。我将他们的数据类型作为NSStrings,当保存到核心数据时,一切正常。 我正在将NSStrings转换为浮点数并执行适当的数学运算,以便得出最终的计算值。此最终值不会输出到文本字段,而是保存在核心数据中。我一直在同一行上得到这两个错误:*“将'double'传递给不兼容类型'NSString '的参数和”从不兼容类型'double'分配给'NSString *'。 (第10行是带有这些消息的那个)

1     float dollar1 = [self.dataModel.price          floatValue];
2     float P1      = [self.dataModel.percentage     floatValue];
3     float dollar2 = [self.dataModel.price          floatValue];
4     float P2      = [self.dataModel.percentage2    floatValue];

5     float totalPrice = dollar1 + dollar2;
6     float totalPercentage = (P1 + P2) / 100;

7     double finalPrice = round(totalPrice / totalPercentage);

8     //Set final price to save in core data
9     NSLog(@"setting finalPrice to core data slot");
10    dataModel.finalPrice = finalPrice;

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

NSString finalPrice = totalPrice / totalPercentage;

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

修改 所以我现在实际上从我设置的NSLog(@"%@", dataModel.finalPrice);获得了一个数字,但是这个数字很简单。似乎没有正确地完成数学运算:

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

然而,我输出到NSLog的值显示为-2147483648。 世界在哪里来自哪里?

修改 我得救了!这是我做的:

1     NSString dollar1 = self.dataModel.price.text;
2     NSString P1      = self.dataModel.percentage.text;
3     NSString dollar2 = self.dataModel.price.text;
4     NSString P2      = self.dataModel.percentage2.text;   

5     double Dollar1 = [dollar1 doubleValue];
6     double Dollar2 = [dollar2 doubleValue];
7     double p1 = [P1 doubleValue];
8     double p2 = [P2 doubleValue];

9     double totalDollar = Dollar1 + Dollar2;
10      double totalP = p1 + p2;

11    double finalPrice = totalDollar / totalP;
      NSString *finalFinalPrice = [[NSString alloc] initWithFormat:@".2f", finalPrice];

12     //Set final price to save in core data
13     NSLog(@"setting finalPrice to core data slot");
14    dataModel.finalPrice = finalFinalPrice;

哇。这真是太过分了。我无法相信最终解决方案如此简单! 再次感谢您的帮助!!

1 个答案:

答案 0 :(得分:1)

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

...
double finalPrice = round(totalPrice / totalPercentage);
NSString *finalPriceString = [NSString stringWithFormat:@"%0.2f", finalPrice];

dataModel.finalPrice = finalPriceString;

编辑

您的更正:

NSString finalPrice = totalPrice / totalPercentage;

有一些问题。首先,错误Interface type cannot be statically allocated来自NSString需要动态分配(作为指针),而您没有使用指针类型(NSString *)。

其次,totalPricetotalPercentagefloat值,您将它们分开并将它们设置为NSString,这是一种非常不同的数据类型。< / p>