![](/img/trans.png)
[英]Javascript changing image color IndexSizeError: Index or size is negative or greater than the allowed amount
[英]Changing table row color if amount is in negative
嘗試在以下代碼中更改顏色。
如果金額為正(利潤)-> 綠色 ( 發生這種情況 )
如果金額為負(虧損)-> 紅色 (
doesn't
發生 )
function roundToTwo(num) { var rounded = +(Math.round(num + "e+2") + "e-2"); if (rounded < 0.01) { rounded = 0 }; return rounded } $("#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); if (pnl == 0) { $('#pnl_text_display').text("Profit / Loss"); $('#pnl_color').attr('bgcolor', ''); } else if (pnl > 0) { $('#pnl_text_display').text("Profit"); $('#pnl_color').attr('bgcolor', 'green'); } else if (pnl < 0) { $('#pnl_text_display').text("Loss"); $('#pnl_color').attr('bgcolor', 'red'); } $('#tot_amnt_trade_display').text(total_amnt_trade); $('#total_charges_display').text(total_charges); $('#pnl_display').text(pnl); if (quantity > 0) { if ((buy > 0) || (sell > 0)) { var bep_pnl = -0.5; if (buy == 0) { buy = roundToTwo(sell - 0.01); while (bep_pnl < 0.01) { 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); bep_pnl = roundToTwo(((sell - buy) * quantity) - total_charges); buy = roundToTwo(buy - 0.01); } var bep = roundToTwo(sell - buy); $('#bep_display').text(bep); } else { sell = roundToTwo(buy + 0.001); while (bep_pnl < 0.01) { 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); bep_pnl = roundToTwo(((sell - buy) * quantity) - total_charges); sell = roundToTwo(sell + 0.01); } var bep = roundToTwo(sell - buy); $('#bep_display').text(bep); } } } })
<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> </tbody> </table> <table class="table table-dark right_side_col"> <tbody> <tr> <td>Total Amount Traded</td> <td><span id="tot_amnt_trade_display"></span></td> </tr> <tr id="pnl_color"> <td><span id="pnl_text_display">Profit / Loss</span></td> <td><span id="pnl_display"></span></td> </tr> <tr> <td>Breakeven Point</td> <td><span id="bep_display"></span></td> </tr> </tbody> </table> <table class="table table-dark right_side_col"> <tbody> <tr> <td>Total Charges</td> <td><span id="total_charges_display"></span></td> </tr> </tbody> </table>
此外,還請幫助我我的收支平衡點( BEP )公式正確與否,還有沒有更簡單的方法來編寫邏輯代碼?
BEP是指交易者既沒有虧損也沒有利潤的情況。
您的代碼的問題在於,在roundToTwo
函數中,您寫道,如果number小於0.01
則返回0。因此,它將永遠不會返回小於0的數字。因此,只需刪除if statement
,它將按預期工作。
function roundToTwo(num) {
return +(Math.round(num + "e+2") + "e-2");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.