为什么NSNumber在转换为无符号整数时会舍入减号?

时间:2018-09-25 08:43:11

标签: objective-c casting unsigned nsnumber

例如:

[@(-2.50001) unsignedIntegerValue] == -3
[@(-2.49999) unsignedIntegerValue] == -2

但是:

[@(-2.50001) integerValue] == -2
[@(-2.49999) integerValue] == -2

好,这是代码。我正在编写我的代码的单元测试:

- (void)testUnsignedIntegerValue {
    XCTAssertEqual([@(-2.50001) unsignedIntegerValue], (NSUInteger)-3);
    XCTAssertEqual([@(-2.49999) unsignedIntegerValue], (NSUInteger)-2);
}

1 个答案:

答案 0 :(得分:4)

来自NSNumber docs

  

由于数字类型具有不同的存储功能,因此尝试   用一种类型的值初始化并访问另一种类型的值   类型可能会产生错误的结果

此外,在更下方的Table 4 – NSNumber from Floating Point Value Conversions中,具体显示了查询从负浮点值创建的unsignedIntegerValue的{​​{1}}会产生“ 无效,错误的结果”。

您要尝试执行的操作本质上是不确定的,并且无法使其可靠。