NSDecimalNumber的用法

我在做电商项目的时候遇到一个问题,就是精确价格的问题,许多电商项目都会涉及到,就是当我们对价格用float或者double进行处理的时候,有的时候总是会出现一些误差,还有就是假如我们精确小数点后面两位,就有可能出现xxx.00或者xx.x0的问题,这些都是我们在处理价格的时候可能会遇到的坑!!而且涉及到钱的问题,不管什么app都要做到特别的精确,不能出现任何的误差!

经过在网上进行查阅,发现苹果已经为我们提供了一个类“NSDecimalNumber”。

NSDecimalNumber是NSNumber的不可变子类。苹果针对浮点型计算时存在精度计算误差的问题而提供的一个计算类!

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    NSString *str1 = @"222.22";

    NSString *str2 = @"98.32";

    

    NSDecimalNumber *str1Dec = [NSDecimalNumber decimalNumberWithString:str1];

    NSDecimalNumber *str2Dec = [NSDecimalNumber decimalNumberWithString:str2];

    

    //加法

    NSDecimalNumber *addDec = [str1Dec decimalNumberByAdding:str2Dec];

    NSLog(@"%@", addDec);

    

    //减法   srr1的数值减去str2的数值

    NSDecimalNumber *subDec = [str1Dec decimalNumberBySubtracting:str2Dec];

    NSLog(@"%@", subDec);

    

    //乘法

    NSDecimalNumber *multiplyDec = [str1Dec decimalNumberByMultiplyingBy:str2Dec];

    NSLog(@"%@", multiplyDec);

    

    //除法   srr1的数值除以str2的数值

    NSDecimalNumber *dividingDec = [str1Dec decimalNumberByDividingBy:str2Dec];

    NSLog(@"%@", dividingDec);

    //两个数值进行比较

    NSComparisonResult result = [str1Dec compare:str2Dec];

    NSLog(@"%ld", result);

    if (result == 1) {

        //srr1的数值大于str2的数值

    } else if (result == 0) {

        //srr1的数值等于str2的数值

    } else if (result == -1) {

        //srr1的数值小于str2的数值

    }

}

结果为:::

2017-09-04 17:38:20.639415+0800 CocoaPodsDemo[3185:1185987] 320.54

2017-09-04 17:38:20.639626+0800 CocoaPodsDemo[3185:1185987] 123.9

2017-09-04 17:38:20.640155+0800 CocoaPodsDemo[3185:1185987] 21848.6704

2017-09-04 17:38:20.640420+0800 CocoaPodsDemo[3185:1185987] 2.260170870626526

2017-09-04 17:38:20.640678+0800 CocoaPodsDemo[3185:1185987] 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值