2012-02-17 9 views
2

我解析從內容如下(部分提取物)的XML文件中的一些頂點信息:將NSString轉換爲Float - 添加小數位?

21081.7 23447.6 2781.62 24207.4 18697.3 -2196.96 

我字符串保存爲一個NSString,然後將轉換爲浮點值(我將在後面送入的OpenGL ES)

NSString * xPoint = [finishedParsingArray objectAtIndex:baseIndex]; 
       NSLog(@"xPoiint is %@", xPoint); 

       float x = [xPoint floatValue]; 

的問題是,浮子X改變值如下:

21081.699219, 23447.599609, 2781.620117, 24207.400391, 18697.300781, -2196.959961 

正如你可以看到,它在變噸他的小數位數(不知道它是如何做到這一點 - 必須在xml文件中隱藏格式?)

我的問題是如何存儲浮點數以匹配NSString/XML文件中的原始數字到相同的小數位數?

在此先感謝!

+1

我會使用'NSNumber'。 – dasdom 2012-02-17 12:39:21

+1

你不能轉換爲浮動,並沒有發生這種情況。 – 2012-02-17 12:53:08

+0

但請注意,您可以通過在顯示浮動值時簡單地格式化浮動值,輕鬆找回類似於原始格式的東西。例如「%4.2f」會給你帶有兩位小數的小數位數。 – 2012-02-17 12:55:07

回答

5

你的問題似乎是,你不明白如何floats存儲在內存中,並不知道浮動不是精確的

確切的值往往不能被存儲,所以系統選擇它可以代表它的最接近的數字。如果仔細觀察,可以看到每個輸出的數字都非常接近您輸入的值。

爲了獲得更好的準確性,請嘗試使用double來代替。 Double確實遇到同樣的問題,但精度更高。花車約有6位有效數字;雙打比兩倍多。 Source

這裏有一些其他StackOverflow的答案和外部的文章你應該閱讀:

2

其存儲浮點數所有原始數據有一個準確的問題。大多數情況下,它非常小,沒關係,但有時候這很重要。

重要的是要保留確切的數字,我會建議使用NSDecimalNumber