1.现象 - 在ios下float,和double类型数值进行计算时会出现错误,是因为精度的问题;
假如nsstring * money = @"0.01";
float moneyNumber = [money floatValue];
moneyNumber = 0.010000263; (double也有相同的问题);
2. 解决方法 - 可以用框架自带的NSDecimalNumber类解决问题
self.payCount 为商品价格(字符串类型)
self.pointMoney为用户积分可兑换钱数(字符串类型)
-(BOOL)affordToMoney{ //用返回的bool判断是否支付得起
NSDecimalNumber * rest = [NSDecimalNumber decimalNumberWithString:self.payCount]; //self.payCount 为商品价格(字符串类型)
BOOL isCanPay = NO;
if (self.isPoint == YES) { //选择使用积分钱数抵消部分钱数
if ([pointMoney compare:rest] != NSOrderedAscending) { //积分钱数大于等于商品价格
self.needPointMoney = [rest stringValue];
self.needBankPayMoney = @"0.00";
isCanPay = YES;
}else{
self.needPointMoney = self.pointMoney; //扣除积分可付钱数
rest = [rest decimalNumberBySubtracting:pointMoney];
}else{
self.needPointMoney = @"0.00" ;
}
if (self.isLLPay == YES || self.isALiPay == YES) { //选择了阿里或者连连支付
self.needBankPayMoney = [rest stringValue];
isCanPay = YES;
return isCanPay;
}else{
self.needBankPayMoney = @"0.00";
}
return isCanPay;
}