Tôi đang cố gắng thực hiện một số so sánh số và tôi nhận được một số kết quả lạ.So sánh NSNumber: trả về các kết quả khác nhau
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");
Log đầu ra:
NO
YES
NO
YES
này là cực kỳ bực bội với tôi. Tôi biết điều này có lẽ là do sự khác biệt giữa số bit trong một phao so với một đôi. Dường như với tôi nó cắt ngắn đôi xuống một phao để làm so sánh. Nhưng nếu tôi không biết làm thế nào số được tạo ra, làm thế nào để tôi có được kết quả chính xác? Có cách nào khác để so sánh NSNumber không?
gì về nếu bạn sử dụng '[number1 isEqualToNumber: number2] ', đó là cách ưa thích, ít nhất là nếu bạn chỉ cố gắng xác định sự bình đẳng của các giá trị? – twilson
Xin lỗi twilson, vẫn trả về NO. Các số khác nhau. – picciano