2012-11-25 63 views
0

在iTunes商店搜索时,我碰到了一个小问题。当价格为0.00时,我试图将标签的文字更改为“免费”,而不是显示价格。问题是,我的两个NSDecimalNumber的比较失败。这是我目前的位置。iTunes搜索API,查找免费价格

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[formatter setCurrencyCode:self.searchResult.currency]; 
NSString *price = [formatter stringFromNumber:self.searchResult.price]; 

NSDecimalNumber *free = [[NSDecimalNumber alloc] initWithFloat:0.00f]; 

NSLog(@"Price:%@",price); 
NSLog(@"Free:%@",free); 
NSLog(@"self.searchResult.price: %@", self.searchResult.price); 

if (self.searchResult.price == free) { 
    NSString *freeText = [NSString stringWithFormat:@"FREE"]; 
    self.priceLabel.text = freeText; 
} 
else { 
    self.priceLabel.text = price; 
} 
NSLog(@"priceLabel:%@", self.priceLabel.text); 

什么是真正奇怪的是,即使控制台说,无论freedel.searchResult.price是相同的:

2012-11-24 20:01:16.178 StoreSearch[1987:c07] Price:$0.00 
2012-11-24 20:01:16.178 StoreSearch[1987:c07] Free:0 
2012-11-24 20:01:16.178 StoreSearch[1987:c07] self.searchResult.price: 0 
2012-11-24 20:01:16.179 StoreSearch[1987:c07] priceLabel:$0.00 

我这个有点困惑坦白。任何帮助,将不胜感激。如果你能解释为什么会发生这种事情,以便我可以学会不再做,那么我会更感激!

的问候,
迈克

回答

1

你得到的NSNumber和其他的NSNumber(NSDecimalNumber),你做等于指针检查您可能需要需要调用或的isEqual比较原始的浮点值

==使用对象犯规比较值但对象指针(存储器地址)


if(searchResult.price.floatValue == free.floatValue) 

注意浮动不精确,通常不应该用于任何计算或比较。在这种情况下可以,但是

+0

完美!我知道我错过了一些东西。多么愚蠢的错误。仍然在努力让我的'C'日子落后于我。再次感谢。 – Mackey18