NaN при умножении

Я пытаюсь использовать этот код, но я получаю NaN

a = unidade.val();
b = unitario.val();
//alert(a);5
//alert(b);50,00
$(total).val(a * b); //NaN

Почему? потому что это int*float?

+5
источник поделиться
3 ответа

Вы должны разобрать строки перед тем, как будете умножаться, поскольку val всегда возвращает строку, а "50,00" невозможно преобразовать автоматически число.

parseFloat("50,1") дает вам 50. Если запятая здесь является десятичным разделителем, вы должны заменить ее точкой.

Итак, вам, вероятно, нужно

a = parseFloat(unidade.val().replace(",", ".");
b = parseFloat(unitario.val().replace(",", ".");

EDIT:

если вы хотите разрешить номера, отформатированные как 2.500,00, тогда я предлагаю этот код:

function vf(str) {
   return parseFloat(str.replace(".", "").replace(",", "."));
}
a = vf(unidade.val());
b = vf(unitario.val());

Но это dangereous, если у вас есть пользователи, которые предпочитают (или ожидают) американскую нотацию. Я бы, вероятно, придерживался американской нотации и показывал ошибку, если поле содержит запятую.

Обратите внимание, что HTML5 предлагает <input type=number>, который заставляет пользователя вводить число и позволяет вам получать номера напрямую. См. ссылка.

+12
источник

Похоже, вы получаете строки из val().

Вы можете использовать Number или parseInt или parseFloat для создания типов

$(total).val(Number(a) * Number(b)); 
+2
источник

Вам нужно разобрать строки перед тем, как размножаться!

Примечание: Если операнды являются числами, выполняется регулярное арифметическое умножение, что означает, что два положительных или два отрицательных значения равны положительному, тогда как операнды с разными знаками дают отрицательный результат. Если результат слишком высокий или слишком низкий, результатом будет либо бесконечность, либо -Infinity.

Если любой из операндов равен NaN, результатом является NaN.

Если Infinity умножается на 0, результатом будет NaN.

Если Infinity умножается на любое число, отличное от 0, результат будет либо бесконечным, либо -Infinity, в зависимости от знака второго операнда.

Если Infinity умножается на бесконечность, результатом является бесконечность.

+1
источник

Посмотрите другие вопросы по метке или Задайте вопрос