私はいくつかの数値比較をしようとしています。私は奇妙な結果を得ています。NSNumber比較:異なる結果を返す
NSNumber* number1 = [NSNumber numberWithFloat:1.004];
NSNumber* number2 = [NSNumber numberWithDouble:1.004];
([number1 compare:number2] == NSOrderedSame) ? NSLog(@"YES") : NSLog(@"NO");
([number1 compare:number2] == NSOrderedAscending) ? NSLog(@"YES") : NSLog(@"NO");
([number1 doubleValue] == [number2 doubleValue]) ? NSLog(@"YES") : NSLog(@"NO");
([number1 floatValue] == [number2 floatValue]) ? NSLog(@"YES") : NSLog(@"NO");
ログ出力:
NO
YES
NO
YES
これは私にとって非常にイライラさせられます。私はこれがおそらく浮動小数点数のビット数と2倍のビット数との差のためであることを知っています。それは私には、比較を行うために倍精度浮動小数点に切り捨てているようだ。しかし、数字がどのように作成されているのかわからない場合、どうすれば正しい結果が得られますか? NSNumberを比較する別の方法はありますか?
あなたが使用している場合について、 '[数値1 isEqualToNumber:数値2] 'それは、少なくともあなたが価値の平等を確かめようとしているのであれば、好ましい方法です。 – twilson
申し訳ありませんtwilsonは、まだNOを返します。番号は異なります。 – picciano