【发布时间】:2012-09-14 04:39:06
【问题描述】:
我有一个 NSDictionary,其中包含一个值为 4937446359977427944 的键。我尝试将它的值作为 long long 并返回 4937446359977427968?
NSLog(@"value1 = %@", [dict objectForKey"MyKey"]); // prints 4937446359977427944
long long lv = [dict objectForKey:@"MyKey"] longLongValue];
NSLog(@"value2 = %lld", lv); // prints 4937446359977427968
在做:
NSLog(@"%lld", [@"4937446359977427944" longLongValue]); // prints 4937446359977427944
我假设这是某种舍入问题,因为低位似乎已被清除,我只是不知道如何阻止它(或为什么会发生)。
字典是使用 NSJSONSerialization 创建的,并且 JSON 对象确实(正确地)包含 "MyKey": 4937446359977427944 条目并且 dict 对象是正确的。
NSDictionary 中保存的值是 NSDecimalNumber
是否在幕后将某些东西转换为浮点数?
【问题讨论】:
-
您很可能想要关闭另一个 JSON 解析器...
-
我不认为它是 JSON 解析器,因为返回的 dict 使用 NSLog() 正确转储。含义:显示正确的值4937446359977427944。
-
这可以被隔离到一个测试用例没有 JSON 或 NSDictionary 吗?例如在 objectForKey 的结果中构造实际类型/值 ..
-
这些值真的不同吗?或者这是日志记录的产物?即在调试器中比较实际值,而不是依赖 NSLog...
-
是的,它们在调试器中与 NSLog() 输出相同。
标签: objective-c