Objective-C:NSJSONSerialization浮点数问题

时间:2014-05-06 00:17:17

标签: nsjsonserialization

我正在使用NSJSONSerialization将json字符串转换为NSDictionaray

JSON字符串是

{"bid":88.667,"ask":88.704}
NSJSONSerialization之后的

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

有人知道这个问题吗?

2 个答案:

答案 0 :(得分:4)

看起来NSJSONSerialization会将您的值序列化为双精度数,尽管双精度不足以精确表示某些值。在此处查看更多详细信息:Does NSJSONSerialization deserialize numbers as NSDecimalNumber?

如果精确度不是非常重要,您可以简单地舍入您的值,但由于您正在处理看似是财务应用程序的内容,因此最好将您的值乘以1000乘以整数,将这些值序列化,然后转换回来:

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

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

答案 1 :(得分: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