NSDecimalNumber *userNum = [NSDecimalNumber decimalNumberWithString:@"0.1"];
NSDecimalNumber *userMoney = [multiplierAll decimalNumberByMultiplyingBy:userNum];//优惠金额
NSString *v1 = [userMoney stringValue];
NSDecimalNumber *shengpai = [multiplierAll decimalNumberBySubtracting:userMoney];// 总额 - 优惠
NSString *a1 = [shengpai stringValue];
NSDecimalNumber *shengyou = [multiplicandSpecial decimalNumberBySubtracting:userMoney];
NSString *s1 = [shengyou stringValue];
货币计算 最好用NSDecimalNumber进行科学计数
总的来说,对于货币计算,应该需要注意精度的问题。同时在运算的时候,应该优先选用框架提供的API,否则,就应该使用足够精度的类型运算,同时对自己写的接口进行足够的说明,要求开发者按照规范来使用。
在自己不能保证足够准确的情况下,用适当的说明的要求来规避责任还是可以接受的。至少被人抱怨两句总比出错强。
在iOS开发中,和货币价格计算相关的,需要注意计算精度的问题。即使只是两位小数,也会出现误差。使用float类型运算,是完全不够的。经过一番测试,最后选择使用系统提供的API的NSDecimalNumber来进行更好的解决。