我在做电商项目的时候遇到一个问题,就是精确价格的问题,许多电商项目都会涉及到,就是当我们对价格用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