Objective c 为什么NSNumber在转换为无符号整数时对负数进行舍入?

Objective c 为什么NSNumber在转换为无符号整数时对负数进行舍入?,objective-c,casting,unsigned,nsnumber,Objective C,Casting,Unsigned,Nsnumber,例如: [@(-2.50001) unsignedIntegerValue] == -3 [@(-2.49999) unsignedIntegerValue] == -2 但是: 这是密码。我正在编写代码的单元测试: - (void)testUnsignedIntegerValue { XCTAssertEqual([@(-2.50001) unsignedIntegerValue], (NSUInteger)-3); XCTAssertEqual([@(-2.49999) u

例如:

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

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

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

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

此外,更进一步,具体显示查询从负浮点值创建的
NSNumber
unsignedIntegerValue
会产生“无效、错误的结果”

您试图做的事情本质上是未定义的,无法使其可靠。

来自:

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

此外,更进一步,具体显示查询从负浮点值创建的
NSNumber
unsignedIntegerValue
会产生“无效、错误的结果”

你试图做的事情本质上是不确定的,也不能被认为是可靠的

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