Почему NSDecimalNumber.notANumber.intValue возвращает 9? - PullRequest
0 голосов
/ 07 января 2019

Я нашел ошибку в моем коде, вызванную NSDecimalNumber.notANumber.intValue возвратом 9, в то время как я ожидал NaN (как floatValue или doubleValue возврат). Кто-нибудь знает почему?

enter image description here

1 Ответ

0 голосов
/ 07 января 2019

Как упомянуто Joakim Danielson и отмечено в Документации для разработчиков Apple

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

И поскольку структура Int Swift не может представлять значения NaN, вы получите этот ошибочный результат.

Вместо этого вы можете использовать Int Failable Initializer init(exactly:), который преобразует ваш NSDecimalNumber в Int?, который будет либо содержать его значение, либо будет nil, если он не может быть представлен Int.

let strangeNumber = NSDecimalNumber.notANumber          // nan
let integerRepresentation = Int(exactly: strangeNumber) // nil
...