2012-12-05 27 views
5

我想这个代码,但我得到的NaN楠乘法

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

为什么?因为是int*float

+1

Javascript只有数字。没有int和float。 –

回答

12

您必须在乘以之前解析字符串,因为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()); 

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

请注意,HTML5建议<input type=number>这迫使用户输入数字,让你直接得到数字。请参阅reference

+0

问题是如果我有这样的'2 * 2.500,00 = 5',应该是'5.000,00' –

+0

请参阅编辑:我为此提出了一个解决方案。 –

2

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

您可以使用Number,或parseInt,或parseFloat投类型

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

你有你乘前解析字符串!

注: 如果操作数是数字,则执行常规算术乘法,即两个正数或两个负数等于正数,而具有不同符号的操作数产生负数。如果结果太高或太低,结果可能是无穷大或无穷大。

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

如果无穷大乘以0,则结果为NaN。

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

如果将无穷大乘以无穷大,则结果为无穷大。