javascript - JQuery 中的计算给出结果“NaN”
问题描述
尝试使用 jquery 进行一些计算:
运行以下代码段:放置值
数量为1
购买111
以111.22出售
结果将是NaN。
为什么会这样?如何解决这个问题?
function roundToTwo(num) {
return +(Math.round(num + "e+2") + "e-2");
}
$("#quantity, #buy, #sell").on("change keyup paste", function() {
var quantity = Number($('#quantity').val());
var buy = Number($("#buy").val());
var sell = Number($("#sell").val());
var total_amnt_trade = roundToTwo((quantity * buy) + (quantity * sell));
var brokerage_amnt_buy = ((buy * quantity) * 0.08) / 100;
if (brokerage_amnt_buy >= 25) {
var brokerage_buy = 25;
} else {
var brokerage_buy = brokerage_amnt_buy;
}
var brokerage_amnt_sell = ((sell * quantity) * 0.08) / 100;
if (brokerage_amnt_sell >= 25) {
var brokerage_sell = 25;
} else {
var brokerage_sell = brokerage_amnt_sell;
}
var brokerage = roundToTwo(brokerage_buy + brokerage_sell); //brokerage
var transaction_charges = roundToTwo((((buy * quantity) + (sell * quantity)) * 0.00325) / 100); //Transaction Charges
var gst = roundToTwo((((transaction_charges * 18) / 100) + (brokerage * 18) / 100)); //GST
var total_charges = roundToTwo(brokerage + transaction_charges + gst);
var pnl = roundToTwo(((sell - buy) * quantity) - total_charges);
$('#pnl_display').text(pnl);
})
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<table class="table table-borderless">
<tbody>
<tr style="text-align: center;">
<td><b>Quantity</b></td>
<td><b>Buy</b></td>
<td><b>Sell</b></td>
</tr>
<tr>
<td><input type="number" class="form-control" id="quantity" placeholder="Quantity" name="quantity"></td>
<td><input type="number" class="form-control" id="buy" placeholder="Buy Amount" name="buy"></td>
<td><input type="number" class="form-control" id="sell" placeholder="Sell Amount" name="sell"></td>
</tr>
<tr id="pnl_color">
<td><span id="pnl_text_display">Profit / Loss</span></td>
<td><span id="pnl_display"></span></td>
</tr>
</tbody>
</table>
运行上面的代码片段:put values
数量为1
购买111
以111.22出售
结果将是NaN。
为什么会这样?如何解决这个问题?
解决方案
而不是roundToTwo
你可以使用.tofixed(2)
然后问题解决。因为您的答案返回e
(-1.1379786002407855e-15) 所以它显示NaN
。
var pnl = parseFloat(((sell - buy) * quantity) - total_charges).toFixed(2);
function roundToTwo(num) {
return +(Math.round(num + "e+2") + "e-2");
}
$("#quantity, #buy, #sell").on("change keyup paste", function() {
var quantity = Number($('#quantity').val());
var buy = Number($("#buy").val());
var sell = Number($("#sell").val());
var total_amnt_trade = roundToTwo((quantity * buy) + (quantity * sell));
var brokerage_amnt_buy = ((buy * quantity) * 0.08) / 100;
if (brokerage_amnt_buy >= 25) {
var brokerage_buy = 25;
} else {
var brokerage_buy = brokerage_amnt_buy;
}
var brokerage_amnt_sell = ((sell * quantity) * 0.08) / 100;
if (brokerage_amnt_sell >= 25) {
var brokerage_sell = 25;
} else {
var brokerage_sell = brokerage_amnt_sell;
}
var brokerage = roundToTwo(brokerage_buy + brokerage_sell); //brokerage
var transaction_charges = roundToTwo((((buy * quantity) + (sell * quantity)) * 0.00325) / 100); //Transaction Charges
var gst = roundToTwo((((transaction_charges * 18) / 100) + (brokerage * 18) / 100)); //GST
var total_charges = roundToTwo(brokerage + transaction_charges + gst);
var pnl = parseFloat(((sell - buy) * quantity) - total_charges).toFixed(5);
pnl = roundToTwo(pnl);
$('#pnl_display').text(pnl);
})
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<table class="table table-borderless">
<tbody>
<tr style="text-align: center;">
<td><b>Quantity</b></td>
<td><b>Buy</b></td>
<td><b>Sell</b></td>
</tr>
<tr>
<td><input type="number" class="form-control" id="quantity" placeholder="Quantity" name="quantity"></td>
<td><input type="number" class="form-control" id="buy" placeholder="Buy Amount" name="buy"></td>
<td><input type="number" class="form-control" id="sell" placeholder="Sell Amount" name="sell"></td>
</tr>
<tr id="pnl_color">
<td><span id="pnl_text_display">Profit / Loss</span></td>
<td><span id="pnl_display"></span></td>
</tr>
</tbody>
</table>
推荐阅读
- java - 我如何初始化spring jar和starter文件?
- javascript - 为什么我的单选按钮没有在 javascript 文件中使用 if else 语句?
- python - pip3,python 在 Windows cmd 上什么都不做
- java - 在android中按下主页按钮后如何保持webview在前台服务中运行?
- java - 用“*”替换所有非元音的代码
- c# - 为什么反射比对象初始化快?
- ios - 获取数据时返回相同的 YouTube 视频
- java - SwingWorker 在方法 LockSupport.park() 中等待很长时间
- python - Sympy:段的交集
- javascript - 为什么 javascript 变量 get 会反映 ng-model 的变化?