jQuery у меня есть часть расчета счета, она не работает должным образом

#jquery #math

#jquery #математика

Вопрос:

Я пытаюсь внедрить значение скидки, получаемое в моей форме. я ввожу свою форму, если я ввел значение, оно добавило 2 значения

 |QTY    GST(TAX)    DISC    RATE  AMOUNT
| 1         18%      10%    100$   108$| // its was wrong Amount Answer  
  

правильный ответ 106.20 $

но я ошибаюсь, как замедлить это, помогите мне

 $('tbody').delegate('.quantity,.price,.gst,.dsc', 'keyup', function() {
  var tr = $(this).parent().parent();
  var quantity = tr.find('.quantity').val();
  var price = tr.find('.price').val();
  var gst = tr.find('.gst').val();
  var dcs = tr.find('.dcs').val();
  var totalamountgst = (quantity * price * gst) / 100;
  var totalamountdcs = (quantity * price * dcs) / 100;
  var totalamounts = (quantity * price   totalamountgst);
  var totalamount = (totalamounts - totalamountdcs);


  tr.find('.totalamount').val(totalamount);
  total();
});

function total() {
  var total = 0;
  $('.totalamount').each(function(i, e) {
    var totalamount = $(this).val() - 0;
    total  = totalamount;
  });
  $('.total').val(total   ".00");
}   
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tbody>
    <tr>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control quantity" name="qty[]" id="validationServer01" placeholder="QTY" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control gst " name="gst_amount[]" id="validationServer01" placeholder="GST" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control dcs " name="dcs_amount[]" id="validationServer01" placeholder="DCS" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="number" class="text-danger  input-lg form-control price" name="purchase_rate[]" id="validationServer01" placeholder="RATE" value="" required pattern="" numbers="" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control totalamount" name="" id="validationServer01" placeholder="AMOUNT" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" disabled></td>
    </tr>
  </tbody>
</table>  

Комментарии:

1. Пожалуйста, начните с правильного объяснения того, какой на самом деле должна быть ваша формула. (Мы могли бы определить это, посмотрев на нее, но нам не нужно было бы.)

2. @CBroe откройте эту ссылку omnicalculator.com/finance/discount добавьте те же значения, о которых я упоминал, после запуска моего кода, введите то же значение, что и в тот раз, когда вы получите разницу в сумме

3. Ваш вопрос должен быть автономным и не полагаться на внешние ресурсы для ясности. Поэтому, пожалуйста, объясните , какая формула должна быть здесь, вместо того, чтобы отсылать нас в другое место.

4. @CBroe я выполняю часть расчета, я добавляю 18% налога и 10% скидку при ставке 100 долларов, но это дает общую сумму 108 долларов, это неправильная общая сумма. правильный ответ 106.20 $, проблема в том, что он не дает надлежащего значения

5. @CBroe я хочу исправить эту общую сумму

Ответ №1:

Все скидки должны быть применены до расчета налога, поэтому:

 $('tbody').delegate('.quantity,.price,.gst,.dsc', 'keyup', function() {
  var tr = $(this).parent().parent();
  var quantity = tr.find('.quantity').val();
  var price = tr.find('.price').val();
  var gst = tr.find('.gst').val();
  var dcs = tr.find('.dcs').val();
  var totalprice = quantity * price;
  var totaldiscount = (totalprice * dcs) / 100;
  var totalvatable = totalprice - totaldiscount;
  var totalvat = (totalvatable * gst) / 100;
  var totalamount = totalvatable   totalvat;


  tr.find('.totalamount').val(totalamount);
  total();
});

function total() {
  var total = 0;
  $('.totalamount').each(function(i, e) {
    var totalamount = $(this).val() - 0;
    total  = totalamount;
  });
  $('.total').val(total   ".00");
}   
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tbody>
    <tr>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control quantity" name="qty[]" id="validationServer01" placeholder="QTY" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control gst " name="gst_amount[]" id="validationServer01" placeholder="GST" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control dcs " name="dcs_amount[]" id="validationServer01" placeholder="DCS" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="number" class="text-danger  input-lg form-control price" name="purchase_rate[]" id="validationServer01" placeholder="RATE" value="" required pattern="" numbers="" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control totalamount" name="" id="validationServer01" placeholder="AMOUNT" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" disabled></td>
    </tr>
  </tbody>
</table>  

Комментарии:

1. спасибо, возможно ли показать всю сумму скидки, а также общее количество заполненных строк, например, показать общую сумму

Ответ №2:

Сначала нужно было вычесть dcs и к этому добавить gst. Лучше использовать parseInt для значений.

 $('tbody').delegate('.quantity,.price,.gst,.dsc', 'keyup', function() {
  var tr = $(this).parent().parent();
  var quantity = parseFloat(tr.find('.quantity').val());
  var price = parseFloat(tr.find('.price').val());
  var gst = parseFloat(tr.find('.gst').val());
  var dcs = parseFloat(tr.find('.dcs').val());
  var totalamount = quantity*price*(100-dcs)/100*(100 gst)/100;

  tr.find('.totalamount').val(totalamount);
  total();
});

function total() {
  var total = 0;
  $('.totalamount').each(function(i, e) {
    var totalamount = $(this).val() - 0;
    total  = totalamount;
  });
  $('.total').val(total   ".00");
}   
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tbody>
    <tr>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control quantity" name="qty[]" id="validationServer01" placeholder="QTY" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control gst " name="gst_amount[]" id="validationServer01" placeholder="GST" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control dcs " name="dcs_amount[]" id="validationServer01" placeholder="DCS" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="number" class="text-danger  input-lg form-control price" name="purchase_rate[]" id="validationServer01" placeholder="RATE" value="" required pattern="" numbers="" autocomplete="off"></td>
      <td> <input style="text-align:center;" type="text" class="text-danger  input-lg form-control totalamount" name="" id="validationServer01" placeholder="AMOUNT" value="" required pattern="[1-2-3-4-3-5-6-7-8-9-10-12] " numbers="onlynumbers" disabled></td>
    </tr>
  </tbody>
</table>  

Комментарии:

1. спасибо, возможно ли показать всю сумму скидки, а также общее количество заполненных строк, например, показать общую сумму

2.спасибо, возможно ли показать всю сумму скидки, а также общее количество заполненных строк, например, показать общую сумму