2012-12-05 21 views
5

に私はこのコードをしようとしていますが、私はNaNに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(",", "."); 

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>を提案しています。これにより、ユーザーは数字を入力して番号を直接入力できるようになります。 referenceを参照してください。

+0

問題は、この '2 * 2.500,00 = 5'のようなもので、' 5.000,00'である必要があります。 –

+0

編集を参照してください。 –

2

文字列がval()のように見えます。

あなたは乗算の前に文字列を解析するタイプ

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

あなたが持っているをキャストするNumber、またはparseInt、またはparseFloatを使用することができます!

注:オペランドが数字の場合、正の算術乗算が実行されます。つまり、2つの正または2つの負が正の値になりますが、異なる符号のオペランドは負になります。結果が高すぎたり低すぎたりすると、結果はInfinityまたは-Infinityになります。

いずれかのオペランドがNaNの場合、結果はNaNになります。

Infinityに0を掛けた場合、結果はNaNになります。

Infinityに0以外の数値を掛けた場合、結果は第2オペランドの符号によってInfinityまたは-Infinityになります。

InfinityにInfinityを乗算すると、結果はInfinityになります。