2013-04-22 29 views
2

浮點值在與JSONKit解析後發生變化。調用objectFromJSONStringmutableObjectFromJSONString後會出現問題。在JSONKit.m觸發此方法之前JSONKit在iphone中解析來自webservice的JSON對象時的浮點值

JSON響應是好的:

static id _NSStringObjectFromJSONString(NSString *jsonString, JKParseOptionFlags parseOptionFlags, NSError **error, BOOL mutableCollection) 

原始響應:調用objectFromJSONString

"value":"1002.65" 

響應:

"value":"1002.6500000001" or sometimes "value":"1002.649999999 " 

感謝。

+1

'float' ***不能完全代表數字1002.65。 – 2013-04-22 11:35:33

回答

0

使用浮子固定點表示像,

NSLog(@"value = %.2f",floatvalue); 

現在將顯示值= 1002.65

4

這不是一個問題。

不能使用IEEE 754浮點數精確地表示值1002.65。 使用printf格式轉換說明符%.17g將浮點數轉換爲其十進制表示形式。

Docs

的C雙鍵的原始類型,或IEEE 754雙64位浮點, 用於表示浮點JSON數值。 JSON 包含的浮點數值不能被表示爲 double(即由於溢出或下溢)將無法解析,並且 可選地返回NSError對象。函數strtod()用於 執行轉換。請注意,JSON標準不允許使用 無限或NaN(不是數字)。浮點值的轉換和操作不是微不足道的。不幸的是,RFC 4627是 沒有提到如何處理這些細節。您不應該依賴於 ,或者預計當浮點值被四捨五入時,其 將具有相同的文本表示,甚至比較相等。這個 即使在使用JSONKit作爲JSON的解析器和創建者時也是如此,更不用說當在不同系統 和實現之間傳輸JSON時。

來源:見這個線程https://github.com/johnezang/JSONKit/issues/110

解決方法:可以指定一個精度,而轉換浮到輸出的字符串。 NSNumberFormatter將是一個更好的選擇,或者像以前的答案一樣使用一些printf解決方案。

+0

那麼解決方案是什麼? – Warrior 2013-04-22 12:12:43

+0

看到我更新的答案..這足夠嗎? – 2013-04-22 12:30:50