2014-05-06 34 views
7

我使用NSJSONSerialization以JSON字符串轉換爲NSDictionaray的Objective-C:NSJSONSerialization浮點數問題

JSON字符串是

{"bid":88.667,"ask":88.704} 

後NSJSONSerialization

{ 
    ask = "88.70399999999999"; 
    bid = "88.667"; 
} 

任何人都知道這一點問題?

+1

你找到任何答案嗎? ...我正面臨這個問題。 –

+0

@mihirmehta不,我沒有。 – damo

回答

4

看起來好像NSJSONSerialization會將您的值序列化爲雙精度值,儘管事實上雙精度不足以精確地表示某些值。在這裏看到更多的細節:Does NSJSONSerialization deserialize numbers as NSDecimalNumber?

如果精度不是非常重要,你可以簡單地舍入你的值,但因爲你正在處理似乎是一個財務應用程序,最好將你的值轉換爲整數乘以1000,序列化那些,然後轉換回:

{"bid":88667,"ask":88704} 

另一種方法是使用字符串。

1

使用下面的代碼來得到您的確切值。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumFractionDigits:2]; 
[formatter setRoundingMode: NSNumberFormatterRoundUp]; 

NSString *strNumber = [formatter stringFromNumber:[NSNumber numberWithFloat:88.70399999999999]]; 
NSString *strNumber = [formatter stringFromNumber:[NSNumber numberWithFloat:88.667]]; 

輸出將88.7 & 輸出將是88.67