2012-12-05 33 views
5

tôi đang cố gắng mã này, nhưng tôi đang nhận được NaNNaN trong nhân

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

Tại sao? bởi vì là int*float?

+1

Javascript chỉ có số. Không có int và float. –

Trả lời

12

Bạn phải phân tích chuỗi trước khi bạn nhân với số val luôn trả về một chuỗi và "50,00" không thể tự động được chuyển đổi thành một số.

parseFloat("50,1") cung cấp cho bạn 50. Nếu dấu phẩy ở đây là dấu tách thập phân, bạn phải thay thế bằng dấu chấm.

Vì vậy, bạn có thể cần

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

EDIT:

nếu bạn muốn cho phép số định dạng giống như 2.500,00, sau đó tôi đề nghị mã này:

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

Nhưng nó dangereous nếu bạn có người dùng thích (hoặc mong đợi) ký hiệu Mỹ. Tôi có thể dính vào ký pháp Mỹ và hiển thị lỗi nếu trường có dấu phẩy.

Lưu ý rằng HTML5 đề xuất <input type=number> buộc người dùng phải nhập số và cho phép bạn lấy số trực tiếp. Xem reference.

+0

vấn đề là nếu tôi có một cái gì đó như thế này '2 * 2.500,00 = 5' và nên là '5.000,00' –

+0

Xem chỉnh sửa: Tôi đề xuất một giải pháp cho việc này. –

2

Có vẻ như bạn nhận được các chuỗi từ hàm val().

Bạn có thể sử dụng Number, hoặc parseInt, hoặc parseFloat để cast loại

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

Bạn cần phải phân tích các chuỗi trước khi bạn nhân!

Lưu ý: Nếu toán hạng là số, số học thông thường nhân được thực hiện, nghĩa là hai số dương hoặc hai âm bằng dương, trong khi phép toán với các dấu khác nhau mang lại giá trị âm. Nếu kết quả quá cao hoặc quá thấp, kết quả là vô cực hoặc là vô cực.

Nếu toán hạng là NaN, kết quả là NaN.

Nếu Infinity được nhân với 0, kết quả là NaN.

Nếu vô cực được nhân với bất kỳ số nào khác 0, kết quả là vô cực hoặc –Infinity, tùy thuộc vào dấu hiệu của toán hạng thứ hai.

Nếu Infinity được nhân với Infinity, kết quả là Vô cực.