先看效果圖
add.gif
功能需求
- 多選,單選,全選,店鋪全選
- 商店滿減活動
- 十進制價錢計算
- 滿X元免運費
- 點擊商品靜如詳情,點擊店鋪跳轉店鋪主頁
- 側滑刪除,以及數量添加
首先說明一下數據結構
-
購物車信息
BA6CD95D-371E-49B0-AEBD-455E82ECDC09.png
-
購物車CartList下的集合類容
7B9ABE72-4281-4352-B12E-7137B63A5D46.png -
運費信息
5447F79C-798F-4781-BF71-01D903BFFC66.png
UI布局
FD87063B-5921-4AE5-94A2-2559721A7101.png
代碼部分
NSDecimalNumber
:在iOS開發中,和貨幣價格計算相關的,需要注意計算精度的問題。即使只是兩位小數,也會出現誤差。使用float類型運算,是完全不夠的,NSDecimalNumber
這個類是NSNumber的不可變子類。蘋果針對浮點型計算時存在精度計算誤差的問題而提供的一個計算類,它是基于10進制的定點計算保證了精度不會缺失。同時也可以定制精度的取正類型:向上取正、向下去正、四舍五入等。相對與浮點類型的計算,NSDecimalNumber提供了更加精準的計算。
// 這是整個購物車計算的核心,每一次選中商品,添加,或者刪除,都會重新將整個購物車里面的商品取出來,判斷是否選中,如果選中加入計算,更改UI
#pragma mark- 計算價錢
-(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) {
// 計算實際應付的金額,(符合滿減條件去掉滿減的金額)
NSDecimalNumber *decimalNumber5 = [NSDecimalNumber decimalNumberWithString:self.Actualprice];
self.Actualprice =[[decimalNumber5 decimalNumberBySubtracting:decimalNumber3] stringValue];
self.canMadeCoup = @"1";
}
}
// 修改底部錢數顯示
_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:@"結算(%ld)",self.GoodsSelectCount] forState:UIControlStateNormal];
[self aboutfreihtUI];
}
購物車demo Github下載
https://github.com/LxwYl/XW-ShopCar
京東商品詳情 高仿
http://www.lxweimin.com/p/c51b1e4b0f8b