2012-11-25 93 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