這裏是代碼:NSDecimalNumber到unsignedLongLong - 錯誤的值
NSNumber* number = [NSDecimalNumber decimalNumberWithString :@"11111111111111111"];
NSLog(@"%@ = %lld", number, [number unsignedLongLongValue]);
而且我得到的輸出:
11111111111111111 = 11111111111111112
難道是已知的bug或我做錯了什麼?
UPDATE: 錯誤報告:https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/3/wo/Stnn5Aaocknzx52c64zbN0/5.83.28.0.9
」如果我正確地記得,如果您在NSDecimalNumber上使用標準NSNumber超類方法,則內部編號首先會轉換爲雙精度浮點數,這會引入像這樣的浮點僞像「 您從哪裏得到這些信息?這聽起來很奇怪,我幾乎不相信它。在大多數情況下,我們通過NSNumber接口來處理實例,我們不應該考慮使用哪個具體的子類來構造這個實例。 – iKiR 2010-07-21 15:09:16
@iKiR - 這裏有一些討論:http://stackoverflow.com/questions/2479100/cocoa-ive-discovered-what-i-think-is-a-bug-with-nsdecimalnumber,它指向馬庫斯的評論這裏:http://www.cimgf.com/2008/04/23/cocoa-tutorial-dont-be-lazy-with-nsdecimalnumber-like-me/,但那並不完全說明這種情況。當我遇到類似的問題時,它可能已經在我找到的cocoa-dev郵件列表存檔中的某處。是的,這很奇怪,我想我當時提交了一份錯誤報告。我建議你自己提交一份。 – 2010-07-21 16:45:45
感謝Brad,幾分鐘前我提交了一個bug:https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/3/wo/Stnn5Aaocknzx52c64zbN0/5.83.28.0.9 – iKiR 2010-07-22 03:43:23