Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC计算发货总额_C#_Asp.net Mvc - Fatal编程技术网

C# ASP.NET MVC计算发货总额

C# ASP.NET MVC计算发货总额,c#,asp.net-mvc,C#,Asp.net Mvc,如何计算html中的发货总额。第一件商品的运费为3.99美元,每增加一件商品的运费为0.99美元 @{ double itemTotal = 0; double subTotal = 0; int totalQty = 0; double discount = 0.8; double shippingBase = 3.99; double shippingItem = 0.99; } @foreach (var item

如何计算html中的发货总额。第一件商品的运费为3.99美元,每增加一件商品的运费为0.99美元

 @{
     double itemTotal = 0;
     double subTotal = 0;
     int totalQty = 0;
     double discount = 0.8;
     double shippingBase = 3.99;
     double shippingItem = 0.99;

 }

    @foreach (var item in Model)
    {

        double price = (double)item.price / 100 * discount;
        itemTotal = @item.qty * price;
        subTotal += itemTotal;
        totalQty += @item.qty;

您可以向循环中添加一个简单的条件和添加:

@{
    double itemTotal = 0;
    double subTotal = 0;
    int totalQty = 0;
    double discount = 0.8;
    double shippingBase = 3.99;
    double shippingItem = 0.99;
    double totalShipping = 0; //used to calculate the cumulative shipping total
}

@foreach (var item in Model)
{

    double price = (double)item.price / 100 * discount;
    itemTotal = @item.qty * price;
    subTotal += itemTotal;
    totalQty += @item.qty;
    totalShipping += ((totalShipping >= shippingBase) ? shippingItem : shippingBase);
}
使用此语句

第一件商品的运费为3.99美元,每件为0.99美元 附加项目

提取以下数据以创建运费模型

public class ShippingCharge {
    public decimal basePrice { get; set; }
    public int baseCount { get; set; }
    public decimal unitPrice { get; set; }
}
使用OP中的示例将填充为

//Shipping charges are 
shippingCharge = new ShippingCharge() {
    // $3.99 
    basePrice = 3.99M,
    //for the first item 
    baseCount = 1,
    // $.99 for each additional item. 
    unitPrice = 0.99M
};
完成后,使用以下算法计算给定项目计数的运费

decimal? CalculateShippingTotal(int itemCount, ShippingCharge charge) {
    decimal? total = null;
    if (charge != null) {
        var basePrice = charge.basePrice;
        var baseCount = charge.baseCount;

        if (itemCount > baseCount) {
            var qtyDifference = itemCount - baseCount;
            var additionalCost = qtyDifference * charge.unitPrice;

            total = basePrice + additionalCost;
        } else {
            total = itemCount * basePrice;
        }
    }
    return total;
}
以下单元测试验证了计算总运费的算法的正确性

[TestMethod]
public void _TotalShipping_For_One_Item() {
    //Arrange
    var totalQty = 1;
    var expected = 3.99M;

    //Act
    var actual = CalculateShippingTotal(totalQty, shippingCharge);

    //Assert
    actual.ShouldBeEquivalentTo(expected);
}

[TestMethod]
public void _TotalShipping_For_Two_Items() {
    //Arrange
    var totalQty = 2;
    var expected = 4.98M;

    //Act
    var actual = CalculateShippingTotal(totalQty, shippingCharge);

    //Assert
    actual.ShouldBeEquivalentTo(expected);
}

[TestMethod]
public void _TotalShipping_For_Three_Items() {
    //Arrange
    var totalQty = 3;
    var expected = 5.97M;

    //Act
    var actual = CalculateShippingTotal(totalQty, shippingCharge);

    //Assert
    actual.ShouldBeEquivalentTo(expected);
}

这个答案的具体目标是如何根据OP而不是折扣小计来计算运输成本。这应该足够简单,你可以通过清点物品、数量和价格来计算。完成后,使用项目计数和费用来计算运输成本。

我对这句话感到困惑:totalShipping+=totalShipping>shippingBase?shippingItem:shippingBase;这是一个“三级操作符”:。它本质上类似于“如果”语句,但更简洁。在本例中,循环中的每个迭代(对于每个项目),“某物”被添加到
totalShipping
。如果
totalShipping
小于
3.99
(这表明这是第一次通过循环),则
3.99
将添加到
totalShipping
。如果
totalShipping
大于
3.99
(第一个项目之后的每个附加项目),那么
shippingItem
0.99
)将添加到
totalShipping
。好的,我尝试过测试它,但当它是第二个项目hmmm时,它没有添加0.99,我想知道这是否是一个操作顺序问题。它是否在第二次添加任何内容?您可以尝试将该表达式放在括号中。检查我的更新答案。你知道吗,我认为需要大于或等于,而不仅仅是大于。再次检查我的更新答案。很抱歉。FIY你可能想考虑把它从你的视图中移入视图模型。这是一条业务规则,因此将其绑定到视图中意味着您只能使用该视图。您可以使用视图帮助器,但由于这是一条业务规则,因此它可能属于模型中的一个方法或单独的业务逻辑类/等。然后,控制器可以通过提供所需的精确值来构建视图模型,并且视图模型可以只显示其中的内容,而无需进行类似的计算。只是一个建议。