NSDecimalNumberBehaviors
NSDecimalBehaviors
протокол объявляет три метода, управляющие дискреционными аспектами работы с NSDecimalNumber
объекты.
scale
и roundingMode
методы определяют точность NSDecimalNumber
возвращаемые значения и путь, которым те значения должны быть округлены для адаптации той точности. exceptionDuringOperation:error:leftOperand:rightOperand:
метод определяет путь в который NSDecimalNumber
объект должен обработать различные ошибки в вычислениях.
Для примера класса, принимающего NSDecimalBehaviors
протокол, посмотрите спецификацию для NSDecimalNumberHandler.
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.0 и позже.
-
roundingMode () - roundingMode
ТребуемыйВозвращает путь который
NSDecimalNumber
decimalNumberBy...
методы вокруг их возвращаемых значений. (требуемый)Возвращаемое значение
Возвращает текущий режим округления. Посмотрите NSRoundingMode для возможных значений.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
масштаб () - масштаб
ТребуемыйВозвращает число цифр, позволенных после десятичного разделителя. (требуемый)
Объявление
Swift
func scale() -> Int16
Objective C
- (short)scale
Возвращаемое значение
Число цифр, позволенных после десятичного разделителя.
Обсуждение
Этот метод ограничивает точность значений, возвращенных
NSDecimalNumber
decimalNumberBy...
методы. Еслиscale
возвращает отрицательную величину, она влияет на цифры перед десятичным разделителем также. Еслиscale
возвратыNSDecimalNoScale
, число цифр неограниченно.Принятие этого
roundingMode
возвратыNSRoundPlain
, различные значенияscale
имейте следующие эффекты на номер 123.456:Масштаб
Возвращаемое значение
NSDecimalNoScale
123.456
2
123.45
0
123
– 2
100
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
exceptionDuringOperation (_: error:leftOperand:rightOperand:) - exceptionDuringOperation:error:leftOperand:rightOperand:
ТребуемыйУказывает что
NSDecimalNumber
объект сделает, когда он встретится с ошибкой. (требуемый)Объявление
Swift
func exceptionDuringOperation(_
method
: Selector, errorerror
: NSCalculationError, leftOperandleftOperand
: NSDecimalNumber, rightOperandrightOperand
: NSDecimalNumber) -> NSDecimalNumber?Objective C
- (NSDecimalNumber *)exceptionDuringOperation:(SEL)
method
error:(NSCalculationError)error
leftOperand:(NSDecimalNumber *)leftOperand
rightOperand:(NSDecimalNumber *)rightOperand
Параметры
method
Метод, выполнявшийся, когда произошла ошибка.
error
Тип сгенерированной ошибки.
leftOperand
Левый операнд.
rightOperand
Правильный операнд.
Обсуждение
Существует четыре возможных значения для
error
, описанный в NSCalculationError. Первые три имеют отношение к пределам на возможностиNSDecimalNumber
представлять десятичные числа.NSDecimalNumber
объект может представлять любое число, которое может быть выражено как мантисса x 10^exponent, где мантисса является десятичным целым числом до 38 цифр долго, и экспонента между –256 и 256. Четвертые результаты вызывающей стороны, пытающейся разделиться на0
.В реализации
exceptionDuringOperation:error:leftOperand:rightOperand:
, можно обработать каждую из этих ошибок несколькими способами:Повысьте исключение. Для объяснения исключений посмотрите, что Исключение Программирует Темы.
Возвратиться
nil
. Вызывающий метод возвратит свое значение, как будто не произошла никакая ошибка. Еслиerror
NSCalculationLossOfPrecision
,method
возвратит неточное значение — т.е. один ограниченный к 38 значительным цифрам. Еслиerror
NSCalculationUnderflow
илиNSCalculationOverflow
,method
возвратитсяNSDecimalNumber
notANumber
. Вы не должны возвращатьсяnil
еслиerror
NSDivideByZero
.Исправьте ошибку и возвратите допустимое
NSDecimalNumber
объект. Вызывающий метод будет использовать это в качестве своего собственного возвращаемого значения.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
Эти константы указывают округление способов поведения.
Объявление
Swift
enum NSRoundingMode : UInt { case RoundPlain case RoundDown case RoundUp case RoundBankers }
Objective C
enum { NSRoundPlain, NSRoundDown, NSRoundUp, NSRoundBankers }; typedef NSUInteger NSRoundingMode;
Константы
-
RoundPlain
NSRoundPlain
Вокруг к самому близкому возвращаемому значению; когда поймано на полпути между двумя положительными числами, окружите; когда поймано между двумя отрицательными числами, округлить в меньшую сторону.
Доступный в OS X v10.0 и позже.
-
RoundDown
NSRoundDown
Округлите в меньшую сторону возвращаемые значения.
Доступный в OS X v10.0 и позже.
-
RoundUp
NSRoundUp
Округлите в большую сторону возвращаемые значения.
Доступный в OS X v10.0 и позже.
-
RoundBankers
NSRoundBankers
Вокруг к самому близкому возвращаемому значению; когда на полпути между двумя возможностями, возвратите возможность, последняя цифра которой ровна.
На практике это означает, что за длительный период числа будут окружаться так часто, как они округляются в меньшую сторону; не будет никакого систематического смещения.
Доступный в OS X v10.0 и позже.
Обсуждение
Округляющийся режим имеет значение только если
scale
метод устанавливает предел для точностиNSDecimalNumber
возвращаемые значения. Это не имеет никакого эффекта еслиscale
возвратыNSDecimalNoScale
. Принятие этогоscale
возвраты 1, округляющийся режим имеет следующие эффекты на различные исходные значения:Исходное значение
NSRoundPlain
NSRoundDown
NSRoundUp
NSRoundBankers
1.24
1.2
1.2
1.3
1.2
1.26
1.3
1.2
1.3
1.3
1.25
1.3
1.2
1.3
1.2
1.35
1.4
1.3
1.4
1.4
– 1.35
– 1.4
– 1.4
– 1.3
– 1.4
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
-
Константы ошибки в вычислениях раньше описывали ошибку в
exceptionDuringOperation:error:leftOperand:rightOperand:
.Объявление
Swift
enum NSCalculationError : UInt { case NoError case LossOfPrecision case Underflow case Overflow case DivideByZero }
Objective C
enum { NSCalculationNoError = 0, NSCalculationLossOfPrecision, NSCalculationUnderflow, NSCalculationOverflow, NSCalculationDivideByZero }; typedef NSUInteger NSCalculationError;
Константы
-
NoError
NSCalculationNoError
Никакая ошибка не произошла.
Доступный в OS X v10.0 и позже.
-
LossOfPrecision
NSCalculationLossOfPrecision
Число не может быть представлено в 38 значительных цифрах.
Доступный в OS X v10.0 и позже.
-
Overflow
NSCalculationOverflow
Число является слишком большим для представления.
Доступный в OS X v10.0 и позже.
-
Underflow
NSCalculationUnderflow
Число является слишком маленьким для представления.
Доступный в OS X v10.0 и позже.
-
DivideByZero
NSCalculationDivideByZero
Вызывающая сторона попыталась разделиться на
0
.Доступный в OS X v10.0 и позже.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-