iTunes Search API,查找免费价格

时间:2012-11-25 10:20:08

标签: objective-c ios

在搜索iTunes商店时,我遇到了一个小问题。当价格为0.00时,我试图将我的标签文本更改为“FREE”,而不是显示价格。问题是,我对两个NSDecimalNumber的比较失败了。这是我目前所在的地方。

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 个答案:

答案 0 :(得分:1)

你有NSNumber和另一个NSNumber(NSDecimalNumber)并且你做一个指针等于检查你需要调用isEqual还是比较原始浮点值

==对象不会比较值而是对象指针(内存地址)


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

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