Конкатенация против добавления в JS

Привет, у меня есть очень простая проблема, но я не понимаю, почему это происходит, у меня есть ряд значений, которые я беру около input, и моя цель состоит в том, чтобы добавить эти значения, но проблема в том, что когда я пытаюсь добавить их, я объединяю вместо этого , Вот мой сценарий.

var lun, mart, mier, juev, vier, sab, domin;
lun = $('#lun').val();
mart = $('#mart').val();
mier = $('#mier').val();
juev = $('#juev').val();
vier = $('#vier').val();
sab = $('#sab').val();
domin = $('#domin').val();

$('#ventasError').addClass('hidden');
lun = parseFloat(lun).toFixed(2);
mart = parseFloat(mart).toFixed(2);
mier = parseFloat(mier).toFixed(2);
juev = parseFloat(juev).toFixed(2);
vier = parseFloat(vier).toFixed(2);
sab = parseFloat(sab).toFixed(2);
domin = parseFloat(domin).toFixed(2);

 
let sumVSem = lun + mart + mier + juev + vier + sab + domin;
debugger //justo sumVSem  aquí me tira 1.001.001.001.001.001.001.00 en lugar 7.00
sumVSem = parseFloat(sumVSem).toFixed(2);
$('#promSemanal').val(sumVSem);

Может кто-нибудь сказать мне, что я делаю неправильно?

3
задан 28.11.2019, 20:56
3 ответа
let sumVSem = parseFloat(lun) + parseFloat(mart) + parseFloat(mier) + parseFloat(juev) + parseFloat(vier) + parseFloat(sab) + parseFloat(domin);

С этим уже ты deberГ, - чтобы функционировать.

0
ответ дан 01.12.2019, 10:40
  • 1
    Добавлять explicació n и не только có я говорю ayudarí во многий, чтобы поднимать качество твоего вклада, ademá s, что harí в fá cil понимания, что ты сделал для будущих пользователей. – Aprendiz 28.11.2019, 21:13

Хороший dГ - Как уже они сказали

наверху, метод toFixed() возврати string, если ты хочешь поддержать это asГ, - можешь изменять ты cГіdigo таким образом, добавляя один parseFloat() к каждой переменной во время делания суммы.

$( document ).ready(function() {	
		var lun, mart, mier, juev, vier, sab, domin;
		lun = $('#lun').val();
		mart = $('#mart').val();
		mier = $('#mier').val();
		juev = $('#juev').val();
		vier = $('#vier').val();
		sab = $('#sab').val();
		domin = $('#domin').val();

		$('#ventasError').addClass('hidden');
		lun = parseFloat(lun).toFixed(2);
		mart = parseFloat(mart).toFixed(2);
		mier = parseFloat(mier).toFixed(2);
		juev = parseFloat(juev).toFixed(2);
		vier = parseFloat(vier).toFixed(2);
		sab = parseFloat(sab).toFixed(2);
		domin = parseFloat(domin).toFixed(2);


		let sumVSem = parseFloat(lun) + parseFloat(mart) + parseFloat(mier) + parseFloat(juev) + parseFloat(vier) + parseFloat(sab) + parseFloat(domin);
		console.log(sumVSem);
	  //justo sumVSem  aquí me tira 1.001.001.001.001.001.001.00 en lugar 7.00
		// sumVSem = parseFloat(sumVSem).toFixed(2);
		// $('#promSemanal').val(sumVSem);
	});
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<script>
	
</script>
<body>
	<input type="text" id="lun" value="1">
	<input type="text" id="mart" value="1">
	<input type="text" id="mier" value="1">
	<input type="text" id="juev" value="1">
	<input type="text" id="vier" value="1">
	<input type="text" id="sab" value="1">
	<input type="text" id="domin" value="1">
</body>
</html>

Надеялся, что он подает тебе

3
ответ дан 01.12.2019, 10:40

Хотя уже у тебя есть получающий ответ, мой ответ enfocarГЎ в оптимизировании немного того, что estГЎs пробуя делать.

EstГЎs повторяя того же самого cГіdigo 7 раз (1 раз из-за каждый dГ - в недели, представленный в твоих элементах <input>).

Способ предотвращать эту repeticiГіn serГ, - чтобы заносить в список твои элементы в типе array и использовать их mГ©todo свойственные тому же самому.

Давайте Предполагать, что твой HTML приходит данный asГ - (все элементы тип <input> - прямые дети элемента отец тип <div>):

<div id="dias">
  <input type="text" id="lun" value="0">
  <input type="text" id="mar" value="0">
  ...
  <input type="text" id="dom" value="0">
</div>

PodrГ-Схвати делать следующее:

let valores = [];

if($('#dias').children().length) {
  $('#dias').children().each((index, element) => {
    valores.push(parseFloat(element.value));
  });
}

let suma = valores.length ? valores.reduce((sum, curr) => sum + curr).toFixed(2) : "0.00";

console.log(suma);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="dias">
  <input type="text" id="lun" value="0.1234">
  <input type="text" id="mar" value="0.2345">
  <input type="text" id="mie" value="0.3456">
  <input type="text" id="jue" value="0.4567">
  <input type="text" id="vie" value="0.5678">
  <input type="text" id="sab" value="0.6789">
  <input type="text" id="dom" value="0.7890">
</div>

, Поскольку ты можешь наблюдать, я объявляю тип array, чтобы хранить стоимость каждого элемента input конвертируемых в тип Number используя parseFloat(). Потом я использую mГ©todo reduce(), чтобы складывать всю стоимость array и возвращать стоимость Гєnico, к которой потом я применяю к нему mГ©todo toFixed(), чтобы получать желанный результат.

С этим cГіdigo - mГЎs чистый, и менее повторный.

3
ответ дан 01.12.2019, 10:40