2016-01-06 24 views
0

我有一個Parse中的產品列表,格式是這樣的;解析iOS-SDK - 十進制數字加零

{ 
    Environment = Both; 
    "Ground_indoor" = Finished; 
    "Ground_outdoor" = Finished; 
    "Max_Working_Height" = "9.800000000000001"; 
    Name = "8m Battery Scissor Lift - Genie GS2632"; 
    "Non_Marking_Tyres" = 1; 
    "Platform_Length" = "2.26"; 
    "Platform_Type" = "Scissor Lift"; 
    "Platform_Width" = "0.8100000000000001"; 
    "Tax_Class" = E; 
    Weight = 1956; 
} 

但是,對於一些奇怪的原因,帶有「8」它增加了一些隨機零任何之間。例如Platform_Width實際上是;

http://puu.sh/mlGLo/be9f200472.png

任何線索?

+0

你說它應該是0.81而不是0.8100000000001? –

+0

這正是我說的:) –

+1

有沒有什麼可擔心的,它可能是數據類型,並且服務器發送的浮點值爲額外的零。 Yiu可以使用格式說明符來擺脫它們。 –

回答

0

是的,這是由於浮點不準確。你可能會找到有關它的學術解釋here

或者如果這太多了,我們就簡單說一下 - 例如,讓我們以0.81爲例。該數字不能用浮點數精確表示,因爲整數值81是由二進制值1010001表示的,所以該數字不會被精確地表示爲0.8100000000000001。爲了使值爲0.81,如果您可以使用81 x 10^-2 (= 81/10^2)。但是這是不可能的,因爲你必須使用基數2而不是10.所以最接近10^2 = 100的是128 = 2^7。對於值81(1010001)+3位(對於值7(111)),您需要的總位數爲9:6。那麼值81 x 2^-7並不嚴重不準確。所以爲了改善這種不準確性,我們可以將值81和7改爲其他值。因此,您的值的公式爲X = A x 2^B,其中A和B是整數值正數或負數。數字越高,準確度越高。但是,正如您所知,表示值A和B的位數是有限的。對於浮點數,你總共有32個。Double有64個,Decimal有128個。

希望能解釋你的問題。