Почему NSNumber округляет число минус при приведении к целому числу без знака? - PullRequest
0 голосов
/ 25 сентября 2018

Например:

[@(-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 голосов
/ 26 сентября 2018

Из NSNumber документов :

Поскольку числовые типы имеют разные возможности хранения, попытка инициализации со значением одного типа и доступа к значению другого типа можетвыдаст ошибочный результат

Кроме того, еще дальше Таблица 4 - NSNumber из преобразований значений с плавающей запятой специально показывает, что запрос unsignedIntegerValue для NSNumber создан из отрицательного значенияЗначение с плавающей точкой дает « неверный, ошибочный результат ».

То, что вы пытаетесь сделать, по своей сути не определено и не может быть надежным.

...