NSDecimalNumber-十進(jìn)制數(shù)酣倾,可以有小數(shù)點(diǎn),可以是正負(fù)數(shù)谤专。繼承于NSNumber
+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;
mantissa:長整形灶挟;exponent:指數(shù);flag:正負(fù)數(shù)毒租。
NSDecimalNumber *subtotalAmount = [NSDecimalNumber decimalNumberWithMantissa:1275 exponent:-2 isNegative:NO];? //12.75
subtotalAmount = [NSDecimalNumber decimalNumberWithMantissa:1275 exponent:2 isNegative:YES];? //-127500
+ (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)dcm;
將C語言NSDecimal類型轉(zhuǎn)成一個(gè)十進(jìn)制數(shù)。
NSDecimalNumber *subtotalAmount = [NSDecimalNumber decimalNumberWithMantissa:1275 exponent:-2 isNegative:NO];? //12.75
NSDecimal decimalValue = [subtotalAmount decimalValue];
/**
*? 數(shù)據(jù)結(jié)構(gòu):
(NSDecimal) decimalValue = {
_exponent = -2
_length = 1
_isNegative = 0
_isCompact = 1
_reserved = 0
_mantissa = ([0] = 1275, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0, [6] = 0, [7] = 0)
}
*/
subtotalAmount = [NSDecimalNumber decimalNumberWithDecimal:decimalValue];? //12.75
+ (NSDecimalNumber *)decimalNumberWithString:(nullable NSString *)numberValue;
將字符串轉(zhuǎn)成一個(gè)十進(jìn)制數(shù)。
NSDecimalNumber *discountAmount = [NSDecimalNumber decimalNumberWithString:@"-12.74"];? ? ? //-12.74
discountAmount = [NSDecimalNumber decimalNumberWithString:@"127.4"];? ? ? //127.4
+ (NSDecimalNumber *)decimalNumberWithString:(nullable NSString *)numberValue locale:(nullable id)locale;
這個(gè)有點(diǎn)復(fù)雜墅垮,locale代表一種格式惕医,就像date的格式化一樣。這里的locale可以傳遞兩種格式
NSDictionary類型:
NSDictionary *locale = [NSDictionary dictionaryWithObject:@"," forKey:NSLocaleDecimalSeparator];? ? //以","當(dāng)做小數(shù)點(diǎn)格式
NSDecimalNumber *discountAmount = [NSDecimalNumber decimalNumberWithString:@"123,40" locale:locale];? ? //123.4
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"];? ? //法國數(shù)據(jù)格式,法國的小數(shù)點(diǎn)是','逗號
NSDecimalNumber *discountAmount = [NSDecimalNumber decimalNumberWithString:@"123,40" locale:locale];? ? //123.4
+(NSDecimalNumber *)zero; //0
+(NSDecimalNumber *)one; //1
+(NSDecimalNumber *)minimumDecimalNumber;
//-3402823669209384634633746074317682114550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+(NSDecimalNumber *)maximumDecimalNumber;
//3402823669209384634633746074317682114550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+(NSDecimalNumber *)notANumber;
//非數(shù)字算色,常用于對比抬伺,比如:
[[NSDecimalNumber notANumber] isEqualToNumber:myNumber];
加法運(yùn)算
-(NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
-(NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id )behavior;
減法運(yùn)算
-(NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
-(NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id )behavior;
乘法運(yùn)算
-(NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id )behavior;
除法運(yùn)算
-(NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;
-(NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id )behavior;
a的n次方
-(NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power;
-(NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power withBehavior:(nullable id )behavior;
指數(shù)運(yùn)算
-(NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;
-(NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power
withBehavior:(nullable id )behavior;
四舍五入運(yùn)算
-(NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(nullable id )behavior;
比較運(yùn)算
-(NSComparisonResult)compare:(NSNumber *)decimalNumber;
示例
NSDecimalNumber *discount1 = [NSDecimalNumber decimalNumberWithString:@"1.2"];
NSDecimalNumber *discount2 = [NSDecimalNumber decimalNumberWithString:@"1.3"];
NSComparisonResult result = [discount1 compare:discount2];
if (result == NSOrderedAscending) {
NSLog(@"1.2 < 1.3");
} else if (result == NSOrderedSame) {
NSLog(@"1.2 == 1.3");
} else if (result == NSOrderedDescending) {
NSLog(@"1.2 > 1.3");
}