2012-07-07 51 views
3
(lldb) po [NSString stringWithFormat:@"%.1f", 0.01] 
(id) $21 = 0x003a2560 19991592471028323832250853378750414848.0 
(lldb) po [NSString stringWithFormat:@"%.1f", 0.1] 
(id) $22 = 0x0de92240 -0.0 

有沒有人知道這裏的行爲?我在設備上運行。stringWithFormat的奇怪行爲float

回答

4

這是lldb中的一個錯誤。如果您在gdb中嘗試相同的操作,則它可以正常工作。我懷疑lldb只傳遞參數的低32位。的0.01和它的打印數的IEEE表示是這些:

47ae147b3778df69 = 19991592471028323832250853378750414848.00 
3f847ae147ae147b = 0.01 

注意0.01匹配的低32位的其它數的高32位。

的錯誤也恰好與printf

(lldb) expr (void)printf("%.1f\n", 0.01) 
19991592257096858016910903319197646848.0 
<no result> 

它不+[NSNumber numberWithDouble:]發生:

(lldb) po [NSNumber numberWithDouble:0.01] 
(id) $3 = 0x0fe81390 0.01 

所以我懷疑這個bug是lldb的處理的可變參數的功能。

您可以在the LLVM bugzilla和/或Apple's bug reporter (aka rdar)處打開錯誤報告。

+0

從Xcode 4.4開始,此錯誤已得到修復。 – 2012-08-17 20:59:50