코드입니다 :NSDecimalNumber 여기에 잘못된 값
NSNumber* number = [NSDecimalNumber decimalNumberWithString :@"11111111111111111"];
NSLog(@"%@ = %lld", number, [number unsignedLongLongValue]);
그리고 출력을 얻을 :
11111111111111111 = 11111111111111112
이 그것을 알 수 있는지 확인 버그 내가 뭘 잘못?
UPDATE : 버그보고 : https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/3/wo/Stnn5Aaocknzx52c64zbN0/5.83.28.0.9
"NSDecimalNumber에서 표준 NSNumber 수퍼 클래스 메서드를 사용하면 내부 번호가 먼저 double로 변환되어" 과 같은 부동 소수점 아티팩트가 생길 수 있습니다.이 정보를 어디에서 얻었습니까? 그것은 이상하게 들리며 나는 그것을 거의 믿지 않는다. 대부분의 경우 우리는 NSNumber 인터페이스를 통해 인스턴스로 작업하며이 인스턴스를 구성하는 데 사용 된 구체적인 하위 클래스를 생각해서는 안됩니다. – iKiR
@iKiR - 여기에 토론이있었습니다 : http://stackoverflow.com/questions/2479100/cocoa-ive-discovered-what-i-think-is-a-bug-with-nsdecimalnumber, Marcus의 의견을 가리 킵니다. 여기에 : http://www.cimgf.com/2008/04/23/cocoa-tutorial-dont-be-lazy-with-nsdecimalnumber-like-me/하지만이 사실을 정확히 진술하지는 않습니다. 비슷한 문제가 발생했을 때 코코아 - dev 메일 목록 아카이브의 어딘가에있을 수 있습니다. 예, 이상합니다. 그때 버그 보고서를 제출했다고 생각합니다. 나는 너 자신 또 하나를 신청하는 것이 좋습니다. –
Brad에게 감사드립니다. 몇 분 전에 버그를 제출했습니다. https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/3/wo/Stnn5Aaocknzx52c64zbN0/5.83.28.0.9 – iKiR