0

iTunes Storeを検索しているときに、少し問題が発生しました。価格が0.00の場合、価格を表示するのではなく、ラベルのテキストを「FREE」に変更しようとしています。問題は、2つ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);

本当に奇妙なのは、コンソールが両方とも同じであるとさえ言っていることfreeですdel.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

率直に言って、私はこれに少し混乱しています。どんな助けでもいただければ幸いです。二度とやらないように、なぜこうなったのか説明していただければ、さらにありがたいです!

よろしく、
マイク

4

1 に答える 1

1

NSNumberと別のNSNumber(NSDecimalNumber)を取得し、ポインターが等しいかどうかを確認するには、isEqualを呼び出すか、プリミティブの浮動小数点値を比較する必要があります。

==オブジェクトを使用すると、値は比較されませんが、オブジェクトポインタ(メモリアドレス)が比較されます


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

フロートは不正確であり、通常、計算や比較には使用しないでください。この場合は問題ありませんが

于 2012-11-25T10:35:34.507 に答える