【问题标题】:Why does NSNumber round minus number while cast to unsigned integer?为什么 NSNumber 在转换为无符号整数时会舍入负数?
【发布时间】:2019-02-28 19:56:07
【问题描述】:

例如:

[@(-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);
}

【问题讨论】:

    标签: objective-c casting unsigned nsnumber


    【解决方案1】:

    来自NSNumber docs

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

    此外,再往下,Table 4 – NSNumber from Floating Point Value Conversions 明确表明,查询从负浮点值创建的 NSNumberunsignedIntegerValue 会产生“无效、错误的结果”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多