#javascript
#javascript
Вопрос:
Что я пытаюсь сделать в своей форме, так это то, что когда пользователь нажимает на определенные флажки, значение (в форме с плавающей запятой) суммируется до суммы, но в моем коде теперь оно добавляется, а не складывается.
Это мой код:
<script>
$(document).ready(function() {
function updateSum() {
var total = "0.00";
$(".sum:checked").each(function(i, n) { total = parseFloat($(n).val()).toFixed(2); })
$("#total").val(total);
}
// run the update on every checkbox change and on startup
$("input.sum").change(updateSum);
updateSum();
})
</script>
Когда я устанавливаю несколько флажков, я получаю: 1.002.003.00 вместо: 6.00
мой код выглядит правильно, я не могу видеть, что я пропустил. Любой совет по этому вопросу был бы оценен.
Комментарии:
1. Сначала посчитайте с числами … затем используйте
toFixed()
только для окончательного отображения2. toFixed() возвращает строку.
Ответ №1:
Давайте посмотрим на кратком примере, как toFixed()
ведет себя и как следует добавлять значения с плавающей точкой в JavaScript, если у вас есть исходное значение в виде строки:
(function() {
var total = '0.00';
for (var i = 0; i < 5; i ) {
total = (parseFloat(total) parseFloat(4.3)).toFixed(2);
}
console.log('total', {
total: total,
typeOfTotal: typeof(total)
});
})();
На основе приведенного ниже примера вы можете видеть, что toFixed()
возвращает строку, поэтому я предлагаю изменить ваш код следующим образом, чтобы правильно добавлять числа:
$(document).ready(function() {
function updateSum() {
var total = "0.00";
$(".sum:checked").each(function(i, n) {
let sum = parseFloat(total) parseFloat($(n).val());
total = sum.toFixed(2);
});
$("#total").val(total);
}
// run the update on every checkbox change and on startup
$("input.sum").change(updateSum);
updateSum();
});
Вы можете прочитать подробнее о Number.prototype.toFixed() и parseFloat() здесь.
Комментарии:
1. Спасибо! таким образом, он возвращает строку! я вижу, отмечено на будущее, еще раз спасибо 🙂
2. Почему у вас есть
total = '0.00'
? даже если вы используете его для числовых вычислений? это должно быть число mate3. Это было в вопросе таким образом, потому что я предполагаю, что значение поступает из HTML, поэтому я хотел представить код, который ведет себя аналогично, как в примере вопроса, но я полностью согласен с вами по поводу части вычисления.
Ответ №2:
- Измените значение total= ‘0.00’ на number (всего = 0.00 ) вместо string.
- toFixed возвращает строку, а не числа
let x = 1.22
console.log(typeof (1.22).toFixed(2))