Я наткнулся на нечетное поведение NSDecimalNumber: для некоторых значений вызовы integerValue
, longValue
, longLongValue
и т.д. возвращают неожиданное значение. Пример:
let v = NSDecimalNumber(string: "9.821426272392280061")
v // evaluates to 9.821426272392278
v.intValue // evaluates to 9
v.integerValue // evaluates to -8
v.longValue // evaluates to -8
v.longLongValue // evaluates to -8
let v2 = NSDecimalNumber(string: "9.821426272392280060")
v2 // evaluates to 9.821426272392278
v2.intValue // evaluates to 9
v2.integerValue // evaluates to 9
v2.longValue // evaluates to 9
v2.longLongValue // evaluates to 9
Это использование XCode 7.3; Я не тестировал более ранние версии фреймворков.
Я видел кучу обсуждения неожиданного поведения округления с NSDecimalNumber
, а также предостережения, чтобы не инициализировать его с помощью унаследованных инициализаторов NSNumber
, но я ничего не видел об этом конкретном поведении. Тем не менее, есть довольно подробные дискуссии о внутренних представлениях и округлении, которые могут содержать самородок, которого я ищу, поэтому извиняюсь заранее, если я его пропустил.
РЕДАКТИРОВАТЬ: Он похоронен в комментариях, но я подал это как вопрос № 25465729 с Apple. OpenRadar: http://www.openradar.me/radar?id=5007005597040640.
РЕДАКТИРОВАТЬ 2: Apple отметила это как дубликат # 19812966.