先看效果圖

add.gif
功能需求
- 多選,單選,全選,店鋪全選
- 商店滿減活動(dòng)
- 十進(jìn)制價(jià)錢計(jì)算
- 滿X元免運(yùn)費(fèi)
- 點(diǎn)擊商品靜如詳情,點(diǎn)擊店鋪跳轉(zhuǎn)店鋪主頁
- 側(cè)滑刪除,以及數(shù)量添加
首先說明一下數(shù)據(jù)結(jié)構(gòu)
-
購物車信息
BA6CD95D-371E-49B0-AEBD-455E82ECDC09.png
-
購物車CartList下的集合類容
7B9ABE72-4281-4352-B12E-7137B63A5D46.png -
運(yùn)費(fèi)信息
5447F79C-798F-4781-BF71-01D903BFFC66.png
UI布局

FD87063B-5921-4AE5-94A2-2559721A7101.png
代碼部分
NSDecimalNumber:在iOS開發(fā)中,和貨幣價(jià)格計(jì)算相關(guān)的,需要注意計(jì)算精度的問題。即使只是兩位小數(shù),也會(huì)出現(xiàn)誤差。使用float類型運(yùn)算,是完全不夠的,NSDecimalNumber這個(gè)類是NSNumber的不可變子類。蘋果針對(duì)浮點(diǎn)型計(jì)算時(shí)存在精度計(jì)算誤差的問題而提供的一個(gè)計(jì)算類,它是基于10進(jìn)制的定點(diǎn)計(jì)算保證了精度不會(huì)缺失。同時(shí)也可以定制精度的取正類型:向上取正、向下去正、四舍五入等。相對(duì)與浮點(diǎn)類型的計(jì)算,NSDecimalNumber提供了更加精準(zhǔn)的計(jì)算。
// 這是整個(gè)購物車計(jì)算的核心,每一次選中商品,添加,或者刪除,都會(huì)重新將整個(gè)購物車?yán)锩娴纳唐啡〕鰜?,判斷是否選中,如果選中加入計(jì)算,更改UI
#pragma mark- 計(jì)算價(jià)錢
-(void)jisuanPrice
{
self.totalprice = @"0";
self.Actualprice=@"0";
self.GoodsSelectCount = 0;
self.canMadeCoup = @"0";
for (int i=0; i<self.dataArr.count; i++) {
HPShopCarModel * ShopCarModel =[self.dataArr objectAtIndex:i];
ShopCarModel.currentSelectprice=@"0";
for (int m = 0 ; m <ShopCarModel.content.count; m++) {
HPShopdetailModel * modeldetail = [ShopCarModel.content objectAtIndex:m];
if (modeldetail.isSelect) {
NSDecimalNumber *count = [NSDecimalNumber decimalNumberWithString:modeldetail.count];
NSDecimalNumber *decimalNumber1 = [[NSDecimalNumber decimalNumberWithString: modeldetail.price] decimalNumberByMultiplyingBy:count];
NSDecimalNumber *decimalNumber2 = [NSDecimalNumber decimalNumberWithString:ShopCarModel.currentSelectprice];
//加
ShopCarModel.currentSelectprice = [[decimalNumber1 decimalNumberByAdding:decimalNumber2] stringValue];
self.GoodsSelectCount = [modeldetail.count integerValue]+self.GoodsSelectCount;
}
}
NSDecimalNumber *decimalNumber1 = [NSDecimalNumber decimalNumberWithString: self.totalprice];
NSDecimalNumber *decimalNumber2 = [NSDecimalNumber decimalNumberWithString:ShopCarModel.currentSelectprice];
NSDecimalNumber *decimalNumber3 = [NSDecimalNumber decimalNumberWithString:ShopCarModel.cut_price];
//加
self.totalprice = [[decimalNumber1 decimalNumberByAdding:decimalNumber2] stringValue];
NSLog(@"ShopCarModel.full_price:%@.....ShopCarModel.currentSelectprice:%@...ShopCarModel.cut_price:%@",ShopCarModel.full_price,ShopCarModel.currentSelectprice,ShopCarModel.cut_price);
NSDecimalNumber *decimalNumber4 = [NSDecimalNumber decimalNumberWithString:self.Actualprice];
self.Actualprice =[[decimalNumber4 decimalNumberByAdding:decimalNumber2] stringValue];
if ([ShopCarModel.full_price doubleValue]<[ShopCarModel.currentSelectprice doubleValue]&&[ShopCarModel.full_price doubleValue]>0) {
// 計(jì)算實(shí)際應(yīng)付的金額,(符合滿減條件去掉滿減的金額)
NSDecimalNumber *decimalNumber5 = [NSDecimalNumber decimalNumberWithString:self.Actualprice];
self.Actualprice =[[decimalNumber5 decimalNumberBySubtracting:decimalNumber3] stringValue];
self.canMadeCoup = @"1";
}
}
// 修改底部錢數(shù)顯示
_BottomView.totalprice = [DJTUtility notRounding: [NSDecimalNumber decimalNumberWithString:self.totalprice] afterPoint:2];
_BottomView.Actualprice = [DJTUtility notRounding: [NSDecimalNumber decimalNumberWithString:self.Actualprice] afterPoint:2];
NSLog(@"totalprice:%@=====%@",self.totalprice,[NSString stringWithFormat:@"%.2lf",[self.totalprice floatValue]]);
[_BottomView.Settlement_btn setTitle:[NSString stringWithFormat:@"結(jié)算(%ld)",self.GoodsSelectCount] forState:UIControlStateNormal];
[self aboutfreihtUI];
}
購物車demo Github下載
https://github.com/LxwYl/XW-ShopCar
京東商品詳情 高仿
http://www.itdecent.cn/p/c51b1e4b0f8b


