如何在jquery中进行价格计算?

时间:2016-02-10 10:21:54

标签: jquery html ajax asp.net-mvc

我有一个添加到购物车页面,其中显示添加到购物车的所有商品。还提供了编辑每个产品数量的选项。编辑数量率时应该更改。但小部件不显示。以下代码用于更新控制器中的值:

public ActionResult udateCart(int id, int preview, int Qty)
        {
            float totalValue = 0.00F;
            using (APM context = new APM())
            {
                var stud = (from s in context.T_OrderDetails
                            where s.ID == id
                            select s).FirstOrDefault();
                stud.IsPreviewRequired = preview;
                context.SaveChanges();
                List<Cart> lstcarts = (List<Cart>)Session["Cart"];
                if (Session["Cart"] != null)
                {
                    var totalvalue = lstcarts.Where(x=>x.ID == id).Select(x => x.Amount).FirstOrDefault();
                    var quantity = lstcarts.Where(x => x.ID == id).Select(x => x.Quantity).FirstOrDefault();
                    var total = totalvalue / quantity;
                    totalValue = Qty * total;
                    lstcarts.Where(x => x.ID == id).ToList().ForEach(s => { s.Preview = preview; s.Amount = totalValue; s.Quantity = Qty; });
                    Session["Cart"] = lstcarts;
                }

            }
 return Json(new { success = true, Preview = preview, Amount = totalValue });
        }

此处Amount将返回一个浮点值。但在Ajax成功时,它收到:

 Object { success=true,  Preview=0,  Amount=100 } //eg:100 instead of 100.0

然后在ajax成功进行实际计算:

 $('.eachitem').on('click', '#updateCart', function (e) {
            e.preventDefault();
            var tis = $(this);
        var itemid = $(this).data('assigned-id');
        var val = $(this).closest('tr').find('.qty').val();
        var chek = $(this).closest('tr').find('#preview:checked').length > 0;
        var prev = 0;


    **var amt = ParseFloat($(this).closest('tr').find('.amont').text()).toFixed(2);**
    console.log(amt);

    **var totalb = parseFloat($('.amountclass').text()).toFixed(2);**

    console.log(totalb);


    if (chek == true) {
        prev = 1;
    }
    //var val = $(this).closest('#qtyid').find('#qty').val();
   // var atLeastOneIsChecked = $('#preview:checked').length > 0;


    $.ajax({
        type: "POST",
        url: base_url + '/AddtoCart/udateCart',
        // contentType: "application/json; charset=utf-8",
        data: { id: itemid, preview: prev,Qty:val },

        dataType: 'json', encode: true,
        async: false,
        cache: false,
        success: function (data, status, jqXHR) {

            console.log(data);
            $('.amountclass').remove();
           // $(tis).closest('tr').find('.amont').remove();
            $(tis).closest('tr').find('.amont').html(data["Amount"]);

            var total = ((data["Amount"] + totalb) - amt);
            //console.log(data["Amount"] + totalb);

            console.log((data["Amount"]).toFixed(2));
            var newspan = $('<span class="amont">').text(data["Amount"]);

            $('<span class="amountclass">').text(total).appendTo('.total b');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(jqXHR);

            if (typeof (console) != 'undefined') {
                alert("oooppss");
            }
            else { alert("something went wrong"); }
        }
    });



    });

最后输出不正确,它将变为如下:

enter image description here

3 个答案:

答案 0 :(得分:0)

问题在于Date maxDate = list.stream().map(yourInstance -> yourInstance.date).max(Date::compareTo).get(); Date minDate = list.stream().map(yourInstance -> yourInstance.date).min(Date::compareTo).get(); 您可以看到大写ParseFloat,它应该是小写的P,因为该方法是p

parseFloat()

答案 1 :(得分:0)

您正在连接字符串而不是数学计算

<svg width="600" height="311">
  <defs>
    <linearGradient id="fadeGrad" y2="1" x2="0">
      <stop offset="0" stop-color="white" stop-opacity="0"/>
      <stop offset=".7" stop-color="white" stop-opacity="1"/>
    </linearGradient>
    <mask id="masking" maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox">
      <rect width="1" height="1" fill="url(#fadeGrad)"/>
    </mask>
  </defs>
  <image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://memesvault.com/wp-content/uploads/Doge-Meme-08.jpg" width="600" height="311" mask="url(#masking)"></image>
</svg>

答案 2 :(得分:0)

如果您正在使用货币价值,JavaScript就是您的敌人。

解决此问题的库很少,其中一个是BigNumber。 我有计算数百个发票详细信息的问题,有时只有少数几个,所以我添加了这个库以确保我的计算总是正确的。该库基于Java的BigDecimal。

添加示例:

0.1 + 0.2                       // 0.30000000000000004
x = new BigNumber(0.1)
y = x.plus(0.2)                 // '0.3'
BigNumber(0.7).plus(x).plus(y)  // '1'
x.plus('0.1', 8)                // '0.225'

您的解决方案示例:

var amt = new BigNumber($(this).closest('tr').find('.amont').text());
var totalb = new BigNumber($('.amountclass').text());
var receivedAmt = new BigNumber(data["Amount"]);
var total = receivedAmt.plus(totalb).minus(amt);