NSDecimalNumberBehaviors
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в iOS 2.0 и позже.
NSDecimalBehaviors протокол объявляет три метода, управляющие дискреционными аспектами работы с NSDecimalNumber объекты.
scale и roundingMode методы определяют точность NSDecimalNumberвозвращаемые значения и путь, которым те значения должны быть округлены для адаптации той точности. exceptionDuringOperation:error:leftOperand:rightOperand: метод определяет путь в который NSDecimalNumber объект должен обработать различные ошибки в вычислениях.
Для примера класса, принимающего NSDecimalBehaviors протокол, посмотрите спецификацию для NSDecimalNumberHandler.
-
roundingMode () - roundingModeТребуемыйВозвращает путь который
NSDecimalNumberdecimalNumberBy...методы вокруг их возвращаемых значений. (требуемый)Возвращаемое значение
Возвращает текущий режим округления. Посмотрите NSRoundingMode для возможных значений.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 2.0 и позже.
-
масштаб () - масштабТребуемыйВозвращает число цифр, позволенных после десятичного разделителя. (требуемый)
Объявление
Swift
func scale() -> Int16Objective C
- (short)scaleВозвращаемое значение
Число цифр, позволенных после десятичного разделителя.
Обсуждение
Этот метод ограничивает точность значений, возвращенных
NSDecimalNumberdecimalNumberBy...методы. Еслиscaleвозвращает отрицательную величину, она влияет на цифры перед десятичным разделителем также. ЕслиscaleвозвратыNSDecimalNoScale, число цифр неограниченно.Принятие этого
roundingModeвозвратыNSRoundPlain, различные значенияscaleимейте следующие эффекты на номер 123.456:Масштаб
Возвращаемое значение
NSDecimalNoScale123.456
2
123.45
0
123
– 2
100
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 2.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)methoderror:(NSCalculationError)errorleftOperand:(NSDecimalNumber *)leftOperandrightOperand:(NSDecimalNumber *)rightOperandПараметры
methodМетод, выполнявшийся, когда произошла ошибка.
errorТип сгенерированной ошибки.
leftOperandЛевый операнд.
rightOperandПравильный операнд.
Обсуждение
Существует четыре возможных значения для
error, описанный в NSCalculationError. Первые три имеют отношение к пределам на возможностиNSDecimalNumberпредставлять десятичные числа.NSDecimalNumberобъект может представлять любое число, которое может быть выражено как мантисса x 10^exponent, где мантисса является десятичным целым числом до 38 цифр долго, и экспонента между –256 и 256. Четвертые результаты вызывающей стороны, пытающейся разделиться на0.В реализации
exceptionDuringOperation:error:leftOperand:rightOperand:, можно обработать каждую из этих ошибок несколькими способами:Повысьте исключение. Для объяснения исключений посмотрите, что Исключение Программирует Темы.
Возвратиться
nil. Вызывающий метод возвратит свое значение, как будто не произошла никакая ошибка. ЕслиerrorNSCalculationLossOfPrecision,methodвозвратит неточное значение — т.е. один ограниченный к 38 значительным цифрам. ЕслиerrorNSCalculationUnderflowилиNSCalculationOverflow,methodвозвратитсяNSDecimalNumbernotANumber. Вы не должны возвращатьсяnilеслиerrorNSDivideByZero.Исправьте ошибку и возвратите допустимое
NSDecimalNumberобъект. Вызывающий метод будет использовать это в качестве своего собственного возвращаемого значения.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 2.0 и позже.
-
Эти константы указывают округление способов поведения.
Объявление
Swift
enum NSRoundingMode : UInt { case RoundPlain case RoundDown case RoundUp case RoundBankers }Objective C
enum { NSRoundPlain, NSRoundDown, NSRoundUp, NSRoundBankers }; typedef NSUInteger NSRoundingMode;Константы
-
RoundPlainNSRoundPlainВокруг к самому близкому возвращаемому значению; когда поймано на полпути между двумя положительными числами, окружите; когда поймано между двумя отрицательными числами, округлить в меньшую сторону.
Доступный в iOS 2.0 и позже.
-
RoundDownNSRoundDownОкруглите в меньшую сторону возвращаемые значения.
Доступный в iOS 2.0 и позже.
-
RoundUpNSRoundUpОкруглите в большую сторону возвращаемые значения.
Доступный в iOS 2.0 и позже.
-
RoundBankersNSRoundBankersВокруг к самому близкому возвращаемому значению; когда на полпути между двумя возможностями, возвратите возможность, последняя цифра которой ровна.
На практике это означает, что за длительный период числа будут окружаться так часто, как они округляются в меньшую сторону; не будет никакого систематического смещения.
Доступный в iOS 2.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Доступность
Доступный в iOS 2.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;Константы
-
NoErrorNSCalculationNoErrorНикакая ошибка не произошла.
Доступный в iOS 2.0 и позже.
-
LossOfPrecisionNSCalculationLossOfPrecisionЧисло не может быть представлено в 38 значительных цифрах.
Доступный в iOS 2.0 и позже.
-
OverflowNSCalculationOverflowЧисло является слишком большим для представления.
Доступный в iOS 2.0 и позже.
-
UnderflowNSCalculationUnderflowЧисло является слишком маленьким для представления.
Доступный в iOS 2.0 и позже.
-
DivideByZeroNSCalculationDivideByZeroВызывающая сторона попыталась разделиться на
0.Доступный в iOS 2.0 и позже.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 2.0 и позже.
-
