iOS NSDecimalNumber金钱方面的计算

转自:http://www.cnblogs.com/king1596/p/3688769.html


NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler

                                       decimalNumberHandlerWithRoundingMode:NSRoundBankers

                                       scale:2

                                       raiseOnExactness:NO

                                       raiseOnOverflow:NO

                                       raiseOnUnderflow:NO

                                       raiseOnDivideByZero:YES];

枚举

    NSRoundPlain,   // Round up on a tie //貌似取整 翻译出来是个圆 吗的垃圾百度翻译

    NSRoundDown,    // Always down == truncate  //只舍不入

    NSRoundUp,      // Always up    // 只入不舍

    NSRoundBankers  // on a tie round so last digit is even  貌似四舍五入

    

    //90.7049+0.22 然后四舍五入

    NSDecimalNumber *subtotal = [NSDecimalNumber decimalNumberWithString:@"90.7049"];

    NSDecimalNumber *discount = [NSDecimalNumber decimalNumberWithString:@"0.22"];

    

    NSDecimalNumber *total = [subtotal decimalNumberByAdding:discount withBehavior:roundUp];

    NSLog(@"Rounded total: %@", total);

    

//另一个方法  不准 推荐不用 国内网站一个煞笔 告诉我们的

    NSLog(@"%f", round([[NSString stringWithFormat:@"%f",12345.6749] floatValue]*100)/100);

 

NSDecimalNumber 其他用法

所有NSDecimalNumber对象是不可变的,这意味着已经被创建后不能改变它们的值。

NSDecimalNumber*price;

price = [NSDecimalNumber   decimalNumberWithMantissa:1599

                                          exponent:-2   //10的-2次方

                                          isNegative:NO];

等效

price = [NSDecimalNumber  decimalNumberWithString:@"15.99"];

 

 

NSDecimalNumber*price1 = [NSDecimalNumber  decimalNumberWithString:@"15.99"];

NSDecimalNumber*price2 = [NSDecimalNumber  decimalNumberWithString:@"29.99"];

NSDecimalNumber*coupon = [NSDecimalNumber  decimalNumberWithString:@"5.00"];

NSDecimalNumber*discount = [NSDecimalNumber  decimalNumberWithString:@".90"];

NSDecimalNumber*numProducts = [NSDecimalNumber  decimalNumberWithString:@"2.0];


NSDecimalNumber *subtotal = [price1 decimalNumberByAdding:price2];

NSDecimalNumber *afterCoupon = [subtotal decimalNumberBySubtracting:coupon];

NSDecimalNumber *afterDiscount = [afterCoupon decimalNumberByMultiplyingBy:discount];

NSDecimalNumber *average = [afterDiscount decimalNumberByDividingBy:numProducts];

NSDecimalNumber *averageSquared = [average decimalNumberByRaisingToPower:2];

 

的NSLog(@“小计:%@”,加后);/ / 45.98

 的NSLog(@“优惠券后:%@”,减);/ / 40.98

 的NSLog((@“折后:%@”),9/10);/ / 36.882

 的NSLog(@“每股平均价产品:%@”,平均);/ / 18.441

 的NSLog(@“平均价的平方:%@”,averageSquared);/ / 340.070481

 

//保留小数点后两位

NSDecimalNumberHandler*roundUp = [NSDecimalNumberHandler

                                   decimalNumberHandlerWithRoundingMode:NSRoundUp

                                   scale:2

                                   raiseOnExactness:NO

                                   raiseOnOverflow:NO

                                   raiseOnUnderflow:NO

                                   raiseOnDivideByZero:YES];

 

//9折后 36.882 有余进位结果 36.89

NSDecimalNumber*subtotal = [NSDecimalNumber decimalNumberWithString:@"40.98"];

NSDecimalNumber*discount = [NSDecimalNumber decimalNumberWithString:@".90"];

 

NSDecimalNumber*total = [subtotal decimalNumberByMultiplyingBy:discount

                                                   withBehavior:roundUp];

NSLog(@"Rounded total: %@", total);

 

//比较大小

NSDecimalNumber*discount1 = [NSDecimalNumber decimalNumberWithString:@".85"];

NSDecimalNumber*discount2 = [NSDecimalNumber decimalNumberWithString:@".9"];

NSComparisonResult result = [discount1 compare:discount2];

if (result ==NSOrderedAscending) {

    NSLog(@"85%% < 90%%小于");

} else if (result == NSOrderedSame) {

    NSLog(@"85%% == 90%%等于");

} elseif (result ==NSOrderedDescending) {

    NSLog(@"85%% > 90%%大于");

你可能感兴趣的:(ios开发)