2012-01-12 61 views
-1

精確複製:
Issue with float and double data types in objective C數據類型的OBJ-C

[諷刺的是,要找到你所需要知道的答案重複的問題。]

+2

要引用[維基百科文章](http://en.wikipedia.org/wiki/Floating_point)的主題,「某些數字(例如1/3和0.1)不能完全用二進制浮點數表示,不管精度如何,都要指出。「 – aroth 2012-01-12 23:09:13

+0

這是一個常見的問題,它與目標c相比,更多地涉及浮點表示的一般計算機科學主題。我會標記許多重複問題之一。 – 2012-01-12 23:12:29

+0

至於爲什麼'NSLog'打印的方式與'gdb'不同,32位浮點數對於大約7位數的精度是有好處的。因此,似乎'NSLog'可能會在第七位後截斷以提供更有意義的輸出,而'gdb'則顯示了存儲在變量中的確切值,但未考慮精度。有趣的是,我認爲有人可能會認爲兩種行爲在他們的特定背景下都是正確的。 – aroth 2012-01-12 23:12:42

回答

0

0.1是二進制(0.0001100110011 ...)中的「重複小數」,因此0.1的表示形式不精確。 NSLog可能會四捨五入或截斷輸出。

+0

在* binary *中重複* decimal *? (我知道你的意思,這只是一個奇怪的說法。)() – 2012-01-12 23:11:01

+0

把它稱爲「二進制重複二進制」聽起來更糟糕。有沒有一種標準的方法來引用其他基地中的重複小數部分的數字? – 0x5f3759df 2012-01-12 23:12:13

+0

「一個有重複小數部分的數字」?但我承認「重複小數」可以清楚地表達出想法 – 2012-01-12 23:15:47