NaN在乘法中

时间:2012-12-05 17:44:31

标签: javascript

我正在尝试此代码,但我正在使用NaN

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

为什么呢?因为是int*float

3 个答案:

答案 0 :(得分:13)

你需要在乘法之前解析字符串,因为val总是返回一个字符串而"50,00"不能自动转换为数字。

parseFloat("50,1")为您提供50。如果这里的逗号是小数点分隔符,则必须用点替换它。

所以你可能需要

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

编辑:

如果您想允许格式为2.500,00的数字,那么我建议使用以下代码:

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

但如果你有喜欢(或期望)美国符号的用户,那就太危险了。如果该字段包含逗号,我可能会坚持使用美国符号并显示错误。

请注意,HTML5建议<input type=number>强制用户输入数字并让您直接获取数字。请参阅reference

答案 1 :(得分:3)

看起来你从val()函数获得了字符串。

您可以使用NumberparseIntparseFloat投射类型

$(total).val(Number(a) * Number(b)); 

答案 2 :(得分:1)

你需要在乘法之前解析字符串!

注意: 如果操作数是数字,则执行常规算术乘法,意味着两个正数或两个负数等于正数,而具有不同符号的操作数产生负数。如果结果太高或太低,则结果为Infinity或-Infinity。

如果任一操作数为NaN,则结果为NaN。

如果Infinity乘以0,则结果为NaN。

如果Infinity乘以0以外的任何数字,则结果为Infinity或-Infinity,具体取决于第二个操作数的符号。

如果Infinity乘以Infinity,则结果为Infinity。