Math.round и toFloat и пользовательские функции не округляются до 2 десятичных знаков
У меня есть ипотечный калькулятор, и я хочу, чтобы два выведенных значения были округлены до 2 десятичных знаков. Вот сайт http://hawkstonefs.duneroot.com/, так как вы можете видеть, что он вообще не округляется.
Ниже мой код, я пытался toFloat(2), Math.round и пользовательскую функцию, которую вы можете увидеть в использовании "roundToTwo(num)".
<div class="module">
<script>
(function (window) {
function roundToTwo(num) {
return +(Math.round(num + "e+2") + "e-2");
}
var calculateMortgage = function (formId) {
var
form = document.getElementById(formId),
loan = Math.round(Number(form.loan.value.replace(',',''))),
interest_rate = form.interest_rate.value.replace(",","."),
duration, quote, total;
// refresh sanitised values
form.loan.value = loan;
form.interest_rate.value = interest_rate;
// do field validation
if (form.loan.value <= 0) {
alert('Loan amount is required.');
form.loan.focus();
} else if (form.duration.value == "") {
alert('Duration is required.');
form.duration.focus();
} else if (form.interest_rate.value == "") {
alert('Interest rate is required.');
form.interest_rate.focus();
} else {
if (form.duration_units.value == 1) { // Duration in years
duration = (form.duration.value*12); // in months
} else { // Duration in months
duration = form.duration.value; // in months
}
interest_rate = (interest_rate/12); // monthly
quote = (loan*interest_rate)/(100*(1-Math.pow((1+(interest_rate/100)), -duration)));
total = (quote * duration);
// if browser supports toFixed() method
if (Number.toFixed) {
quote = quote.toFixed(2);
total = total.toFixed(2);
}
form.quote.value = roundToTwo(quote); // monthly
if (form.total) {
form.total.value = roundToTwo(total); // total
}
}
};
window.mortgageCalc = {
calculate: calculateMortgage
};
})(window);
</script>
<form id="mortgage_calc_form">
<p>
<input type="text" name="loan" id="loan" size="12" maxlength="12" placeholder="Loan amount" value="" class="inputbox" />
</p>
<p>
<input type="text" name="duration" placeholder="Duration (years)" id="duration" size="2" maxlength="2" value="" class="inputbox" />
<input type="hidden" name="duration_units" value="1" />
</p>
<p>
<input type="text" name="interest_rate" id="interest_rate" placeholder="Interest rate (3.5%)" size="3" class="inputbox" />
</p>
<p>
<input placeholder="Monthly repayments(GBP)" type="text" name="quote" id="quote" size="12" class="inputbox" readonly/>
</p>
<p>
<input placeholder="Total to be re-paid(GBP)" type="text" name="total" id="total"
size="12" class="inputbox" readonly />
</p>
<p>
<input class="mtBtn" type="reset" name="reset" value="Reset" />
<input class="mtBtn" type="submit" name="submit" value="Calculate" onClick="mortgageCalc.calculate('mortgage_calc_form'); return false;" />
</p>
</form>
</div>
Это должно быть что-то на моем сайте, так как эта js fiddle работает http://jsfiddle.net/ekhqa/
Я использую Wordpress, и этот код жестко запрограммирован в файле sidebar.php.
Спасибо Рик
1 ответ
Если вы загрузите этот плагин: http://mathjs.org/
Тогда вы можете изменить его на:
return math.round(num,2);
Это округляет число до двух десятичных знаков.
В противном случае вы могли бы сделать то, что этот парень сделал в этом вопросе Раунд с точностью до 2 десятичных знаков (только при необходимости)