我正在尝试这段代码,但我得到的是 NaN
a = unidade.val();
b = unitario.val();
//alert(a);5
//alert(b);50,00
$(total).val(a * b); //NaN
为什么?因为是一个int*float
?
我正在尝试这段代码,但我得到的是 NaN
a = unidade.val();
b = unitario.val();
//alert(a);5
//alert(b);50,00
$(total).val(a * b); //NaN
为什么?因为是一个int*float
?
您必须在乘法之前解析字符串,因为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>
强制用户输入数字并让您直接获取数字。请参阅参考资料。
看起来你从val()
函数中获取字符串。
您可以使用Number
, 或parseInt
, orparseFloat
来转换类型
$(total).val(Number(a) * Number(b));
您必须在乘法之前解析字符串!
注意:如果操作数是数字,则执行常规算术乘法,这意味着两个正数或两个负数等于一个正数,而具有不同符号的操作数产生一个负数。如果结果太高或太低,则结果为 Infinity 或 –Infinity。
如果任一操作数为 NaN,则结果为 NaN。
如果 Infinity 乘以 0,则结果为 NaN。
如果 Infinity 乘以除 0 以外的任何数字,则结果为 Infinity 或 –Infinity,具体取决于第二个操作数的符号。
如果 Infinity 乘以 Infinity,则结果为 Infinity。