2015-04-17 2 views
0

Я новичок в JavaScript, я много искал в Интернете, но я не могу решить свою проблему. Я знаю, что «InnerHtml» может быть проблемой и уже пробовал некоторые решения, но ничего не работает.Конкатенация вместо подведения итогов (JavaScript)

Вот мой код:

 function compra() { 

     dinero = document.getElementById("precio").innerHTML; 
     document.getElementById("tipoo").innerHTML; 
     total = dinero+total; 
     document.getElementById("compra").innerHTML = total; 

Проблема заключается в том, что пошел с помощью кнопки, чтобы показать результат, он не добавляет ценности, просто сцепить их.

Я уже пробовал «parseInt», но не работает, или, может быть, я поставил его в неправильном месте.

Спасибо.

Редактировать -----

Спасибо за быстро отвечает ребята ... когда я использую parseFloat или Int я получаю "NaN".

Вот мой код ... надеюсь, что это поможет.

Итого De Compra: $ & ntilde; адир а-ля Lista

+0

Было бы полезно увидеть, как узлы «precio» и «tipoo» выглядят как в HTML - пожалуйста, предоставьте небольшой код для демонстрации контента –

+1

используйте больше плюсов: 'total = + dinero + + total;' или go semantic с 'Number (dinero)' – dandavis

ответ

3

innerHTML возвращает строки. Если вы хотите рассматривать их как числа и добавлять их, вам нужно их преобразовать.

total = parseFloat(dinero) + parseFloat(total); 
+0

Остерегайтесь, если вы используете это, OP. Вы хотите «parseInt», иначе вы столкнетесь с известной ошибкой округления с плавающей запятой (https://www.youtube.com/watch?v=PZRI1IfStY0). Возьмем 'parseFloat (0.2) + parseFloat (0.1)' например, вы выйдете с '0.30000000000000004'. Посмотрите видео, которое я связал для получения дополнительной информации. –

+0

@JordanDoyle Если у него есть десятичные числа на его вкладке, в результате он получит '0', что еще более неправильно. – Barmar

+0

@JordanDoyle выглядит так, что значения в OP могут иметь дробные части, поэтому 'parseInt()' будет плохой идеей. – Pointy

1

Javascript - это слабо типизированный язык. Так что происходит какая-то «магия». Когда вы используете оператор +, он будет добавлять сумму обоих значений, если оба значения являются числами. В противном случае это приведет к конкатенации строк.

Использование «window.parseInt» - это трюк. (или window.parseFloat, если вы работаете с десятичными числами).

изменение:

total = dinero+total; 

к:

total = window.parseInt(dinero) + window.parseInt(total); 

Это превратит номер как "строка" до фактического числа.

+1

не использовать parseInt для этого, номер более надежный. также не нужно префикс «окна». – dandavis

+1

@ JordanDoyle: уверен, я могу вернуть эту надежность: 'alert (parseInt (" 013 "))' в IE8 или 'alert (parseInt (" 13.25 "))' в любом браузере ... – dandavis

+0

Как я уже говорил мой комментарий, используйте 'parseFloat', если вы работаете с десятичными числами. Обычно используется 'parseInt' над' parseFloat', если вы знаете, что значение будет целочисленным. –

0

на основе других ответов (Barmar) и комментарии (Jordan Doyle) лучшим вариантом является использование parseFloat и если число уступает 1 использования toPrecion.

почему parseInt был неправильным для этого случая?

parseInt('77.3') + parseInt('77.3') = 144 //incorrect 

Поэтому мы используем parseFloat:

parseFloat(77.3) + parseFloat(77.3) = 144.6 // correct 

Но тогда мы в проблему ...если мы попытаемся:

parseFloat(0.1) + parseFloat(0.2) 

результат будет

0.30000000000000004 

Так что мое решение этой проблемы:
Если число уступает 1 мы используем toPrecision:

total = parseFloat(0.1) + parseFloat(0.2) 
if(total < 1){ 
total = total.toPrecion(2) // 0.3 Correct 
} 

Ответьте на вопрос:

function compra() { 
dinero = document.getElementById("precio").innerHTML; 
document.getElementById("tipoo").innerHTML; 
total = parseFloat(dinero) + parseFloat(total) 
if(total < 1){ 
    total = total.toPrecion(2); 
} 
document.getElementById("compra").innerHTML = total; 
} 
Смежные вопросы