orever
orever

Reputation: 69

Calculation in jquery

Trying to get Break Even Point (BEP) and selling value using jquery.

function roundToTwo(num) {
  return +(Math.round(num + "e+2") + "e-2");
}

$("#cost").on("change keyup paste", function() {
  var cost = Number($('#cost').val());
  var text
  var total_cost = roundToTwo(((cost * 18) / 100) + cost);

  var profit = -0.5;
  var sell = cost + 0.01;
  while (profit <= 0) {

    sell = sell + 0.01;
    profit = roundToTwo(sell - total_cost);


    text += "<br />New Sell " + sell + " and profit " + profit;
  }
  var bep = roundToTwo(sell - total_cost);
  $('#bep_display').text(bep);
  document.getElementById("testing").innerHTML = text;
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<input type="number" class="form-control" id="cost" placeholder="cost" name="cost">
<h1 id="bep_display">

</h1>
<p id="testing"></p>

Now by running the above code, I entered 1 in the input, so the result (BEP) should be 0, but it gives NaN

Upvotes: 3

Views: 550

Answers (2)

Chirag Jain
Chirag Jain

Reputation: 1387

Because your answer returns with e so it shows NaN. Try:

var bep = parseFloat(sell - total_cost).toFixed(8);

This will give you the result 0.00000000.

If you need a result as 0. Add:

bep = roundToTwo(bep);

function roundToTwo(num) {
  return +(Math.round(num + "e+2") + "e-2");
}

$("#cost").on("change keyup paste", function() {
  var cost = Number($('#cost').val());
  var text
  var total_cost = roundToTwo(((cost * 18) / 100) + cost);

  var profit = -0.5;
  var sell = cost + 0.01;
  while (profit <= 0) {

    sell = sell + 0.01;
    profit = roundToTwo(sell - total_cost);


    text += "<br />New Sell " + sell + " and profit " + profit;
  }
  var bep = parseFloat(sell - total_cost).toFixed(8);
  bep = roundToTwo(bep);
  $('#bep_display').text(bep);
  document.getElementById("testing").innerHTML = text;
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<input type="number" class="form-control" id="cost" placeholder="cost" name="cost">
<h1 id="bep_display">

</h1>
<p id="testing"></p>

Upvotes: 3

Emad Dehnavi
Emad Dehnavi

Reputation: 3441

The problem is with this line :

var bep = roundToTwo(sell - total_cost);

One solution is to fixed your decimals, for example :

var bep = roundToTwo(sell.toFixed(8) - total_cost.toFixed(8));

Upvotes: 2

Related Questions