33 CPRoundingMode _roundingMode;
35 BOOL _raiseOnExactness;
36 BOOL _raiseOnOverflow;
37 BOOL _raiseOnUnderflow;
38 BOOL _raiseOnDivideByZero;
79 - (id)initWithRoundingMode:(CPRoundingMode)roundingMode scale:(
short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero
81 if (
self = [super
init])
83 _roundingMode = roundingMode;
85 _raiseOnExactness = exact;
86 _raiseOnOverflow = overflow;
87 _raiseOnUnderflow = underflow;
88 _raiseOnDivideByZero = divideByZero;
100 + (id)decimalNumberHandlerWithRoundingMode:(CPRoundingMode)roundingMode scale:(
short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero
116 + (id)defaultDecimalNumberHandler
147 - (CPRoundingMode)roundingMode
149 return _roundingMode;
183 case CPCalculationNoError:
187 if (_raiseOnOverflow)
194 if (_raiseOnUnderflow)
201 if (_raiseOnExactness)
206 if (_raiseOnDivideByZero)
240 scale:[aCoder decodeIntForKey:CPDecimalNumberHandlerScaleKey]
241 raiseOnExactness:[aCoder decodeBoolForKey:CPDecimalNumberHandlerRaiseOnExactKey]
242 raiseOnOverflow:[aCoder decodeBoolForKey:CPDecimalNumberHandlerRaiseOnOverflowKey]
243 raiseOnUnderflow:[aCoder decodeBoolForKey:CPDecimalNumberHandlerRaiseOnUnderflowKey]
256 [aCoder encodeInt:[
self roundingMode] forKey:CPDecimalNumberHandlerRoundingModeKey];
257 [aCoder encodeInt:[
self scale] forKey:CPDecimalNumberHandlerScaleKey];
258 [aCoder encodeBool:_raiseOnExactness forKey:CPDecimalNumberHandlerRaiseOnExactKey];
259 [aCoder encodeBool:_raiseOnOverflow forKey:CPDecimalNumberHandlerRaiseOnOverflowKey];
260 [aCoder encodeBool:_raiseOnUnderflow forKey:CPDecimalNumberHandlerRaiseOnUnderflowKey];
261 [aCoder encodeBool:_raiseOnDivideByZero forKey:CPDecimalNumberHandlerDivideByZeroKey];
326 return class_createInstance(
self);
344 - (id)initWithDecimal:(CPDecimal)dcm
346 if (
self = [super
init])
364 - (id)initWithMantissa:(
unsigned long long)mantissa exponent:(
short)exponent isNegative:(BOOL)flag
366 if (
self = [
self init])
400 if (
self = [
self init])
427 + (
CPDecimalNumber)decimalNumberWithMantissa:(
unsigned long long)mantissa exponent:(
short)exponent isNegative:(BOOL)flag
441 return [[
self alloc] initWithString:numberValue];
462 + (id)defaultBehavior
550 error =
CPDecimalAdd(result, [
self decimalValue], [decimalNumber decimalValue], [behavior roundingMode]);
552 if (error > CPCalculationNoError)
587 error =
CPDecimalSubtract(result, [
self decimalValue], [decimalNumber decimalValue], [behavior roundingMode]);
589 if (error > CPCalculationNoError)
625 error =
CPDecimalDivide(result, [
self decimalValue], [decimalNumber decimalValue], [behavior roundingMode]);
627 if (error > CPCalculationNoError)
662 error =
CPDecimalMultiply(result, [
self decimalValue], [decimalNumber decimalValue], [behavior roundingMode]);
664 if (error > CPCalculationNoError)
702 if (error > CPCalculationNoError)
741 error =
CPDecimalPower(result, [
self decimalValue], power, [behavior roundingMode]);
743 if (error > CPCalculationNoError)
765 CPDecimalRound(result, [
self decimalValue], [behavior scale], [behavior roundingMode]);
829 - (CPDecimal)decimalValue
839 - (double)doubleValue
842 return parseFloat([
self stringValue]);
861 return parseInt([
self stringValue]);
871 return parseFloat([
self stringValue]);
881 return parseInt([
self stringValue]);
888 - (
long long)longLongValue
891 return parseInt([
self stringValue]);
901 return parseInt([
self stringValue]);
911 return parseInt([
self stringValue]);
918 - (
unsigned char)unsignedCharValue
921 return parseInt([
self stringValue]);
928 - (
unsigned int)unsignedIntValue
931 return parseInt([
self stringValue]);
938 - (
unsigned long)unsignedLongValue
941 return parseInt([
self stringValue]);
948 - (
unsigned short)unsignedShortValue
951 return parseInt([
self stringValue]);
971 + (id)numberWithBool:(BOOL)aBoolean
973 return [[
self alloc] initWithBool:aBoolean];
981 + (id)numberWithChar:(
char)aChar
983 return [[
self alloc] initWithChar:aChar];
991 + (id)numberWithDouble:(
double)aDouble
993 return [[
self alloc] initWithDouble:aDouble];
1001 + (id)numberWithFloat:(
float)aFloat
1003 return [[
self alloc] initWithFloat:aFloat];
1011 + (id)numberWithInt:(
int)anInt
1013 return [[
self alloc] initWithInt:anInt];
1021 + (id)numberWithLong:(
long)aLong
1023 return [[
self alloc] initWithLong:aLong];
1031 + (id)numberWithLongLong:(
long long)aLongLong
1033 return [[
self alloc] initWithLongLong:aLongLong];
1041 + (id)numberWithShort:(
short)aShort
1043 return [[
self alloc] initWithShort:aShort];
1051 + (id)numberWithUnsignedChar:(
unsigned char)aChar
1053 return [[
self alloc] initWithUnsignedChar:aChar];
1061 + (id)numberWithUnsignedInt:(
unsigned)anUnsignedInt
1063 return [[
self alloc] initWithUnsignedInt:anUnsignedInt];
1071 + (id)numberWithUnsignedLong:(
unsigned long)anUnsignedLong
1073 return [[
self alloc] initWithUnsignedLong:anUnsignedLong];
1081 + (id)numberWithUnsignedLongLong:(
unsigned long)anUnsignedLongLong
1091 + (id)numberWithUnsignedShort:(
unsigned short)anUnsignedShort
1093 return [[
self alloc] initWithUnsignedShort:anUnsignedShort];
1101 - (id)initWithBool:(BOOL)value
1103 if (
self = [
self init])
1113 - (id)initWithChar:(
char)value
1115 return [
self _initWithJSNumber:value];
1123 - (id)initWithDouble:(
double)value
1125 return [
self _initWithJSNumber:value];
1133 - (id)initWithFloat:(
float)value
1135 return [
self _initWithJSNumber:value];
1143 - (id)initWithInt:(
int)value
1145 return [
self _initWithJSNumber:value];
1153 - (id)initWithLong:(
long)value
1155 return [
self _initWithJSNumber:value];
1163 - (id)initWithLongLong:(
long long)value
1165 return [
self _initWithJSNumber:value];
1173 - (id)initWithShort:(
short)value
1175 return [
self _initWithJSNumber:value];
1183 - (id)initWithUnsignedChar:(
unsigned char)value
1185 return [
self _initWithJSNumber:value];
1193 - (id)initWithUnsignedInt:(
unsigned)value
1195 return [
self _initWithJSNumber:value];
1203 - (id)initWithUnsignedLong:(
unsigned long)value
1205 return [
self _initWithJSNumber:value];
1213 - (id)initWithUnsignedLongLong:(
unsigned long long)value
1215 return [
self _initWithJSNumber:value];
1223 - (id)initWithUnsignedShort:(
unsigned short)value
1225 return [
self _initWithJSNumber:value];
1228 - (id)_initWithJSNumber:value
1230 if (
self = [
self init])
1255 dcm._exponent = [aCoder decodeIntForKey:CPDecimalNumberDecimalExponent];
1256 dcm._isNegative = [aCoder decodeBoolForKey:CPDecimalNumberDecimalIsNegative];
1257 dcm._isCompact = [aCoder decodeBoolForKey:CPDecimalNumberDecimalIsCompact];
1258 dcm._isNaN = [aCoder decodeBoolForKey:CPDecimalNumberDecimalIsNaN];
1259 dcm._mantissa = [aCoder decodeObjectForKey:CPDecimalNumberDecimalMantissa];
1272 [aCoder encodeInt:_data._exponent forKey:CPDecimalNumberDecimalExponent];
1273 [aCoder encodeBool:_data._isNegative forKey:CPDecimalNumberDecimalIsNegative];
1274 [aCoder encodeBool:_data._isCompact forKey:CPDecimalNumberDecimalIsCompact];
1275 [aCoder encodeBool:_data._isNaN forKey:CPDecimalNumberDecimalIsNaN];
1276 [aCoder encodeObject:_data._mantissa forKey:CPDecimalNumberDecimalMantissa];