に私はこのコードをしようとしていますが、私はNaNにNaNは、乗算
a = unidade.val();
b = unitario.val();
//alert(a);5
//alert(b);50,00
$(total).val(a * b); //NaN
なぜを取得していますか? int*float
であるためですか?
に私はこのコードをしようとしていますが、私はNaNに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(",", ".");
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を参照してください。
問題は、この '2 * 2.500,00 = 5'のようなもので、' 5.000,00'である必要があります。 –
編集を参照してください。 –
文字列がval()
のように見えます。
あなたは乗算の前に文字列を解析するタイプ
$(total).val(Number(a) * Number(b));
あなたが持っているをキャストするNumber
、またはparseInt
、またはparseFloat
を使用することができます!
注:オペランドが数字の場合、正の算術乗算が実行されます。つまり、2つの正または2つの負が正の値になりますが、異なる符号のオペランドは負になります。結果が高すぎたり低すぎたりすると、結果はInfinityまたは-Infinityになります。
いずれかのオペランドがNaNの場合、結果はNaNになります。
Infinityに0を掛けた場合、結果はNaNになります。
Infinityに0以外の数値を掛けた場合、結果は第2オペランドの符号によってInfinityまたは-Infinityになります。
InfinityにInfinityを乗算すると、結果はInfinityになります。
Javascriptには数字のみが存在します。 intとfloatはありません。 –