0

計算された合計金額を警告したいのですが、値を追加するだけで計算するのではなく、理由がわかりません。

コード:

    $('#main button').click(function(){
    id = $(this).attr('id');
    parts = id.split('_');
    item_id = parts[0];
    pairs = $('#'+item_id+'_pairs').val();
    females = $('#'+item_id + '_females').val();
    males = $('#'+item_id + '_males').val();
    if(pairs >0){
        counted_pairs = pairs*2;
    }else{
        counted_pairs = 0;
    }
    total_fishes = (males + females + counted_pairs);
    alert(total_fishes);
});

フォームに男性 1 人、女性 1 人の 1 ペアを追加すると、合計 4 と表示されるはずですが、111 と表示されているのは計算していないように見えますか?

4

6 に答える 6

5

数値の加算を行う必要があります。あなたが持っているのは文字列連結です。

を使って数値に変換してみてくださいparseInt

total_fishes = (parseInt(males, 10) + parseInt(females, 10) + counted_pairs);

注: counted_pa​​irsは数字になるので申請していません。counted_pairs = pairs*2;

于 2012-12-06T22:41:04.843 に答える
2

追加する変数の1つが文字列値を保持している場合、JavaScriptは、すべてが文字列であるかのように値を相互に追加します。すべての変数が整数値を保持していることを確認してください。それ以外の場合は、他の回答が示唆するように解析して整数に変換します。

于 2012-12-06T22:43:42.317 に答える
2

ifステートメントの前に値を整数に変換します...

pairs = parseInt($('#'+item_id+'_pairs').val(), 10);

females = parseInt($('#'+item_id + '_females').val(), 10);

males = parseInt($('#'+item_id + '_males').val(), 10);
于 2012-12-06T22:45:08.577 に答える
2

値を取得したら、値を数値に解析します。

pairs = parseInt($('#'+item_id+'_pairs').val(), 10);
females = parseInt($('#'+item_id + '_females').val(), 10);
males = parseInt($('#'+item_id + '_males').val(), 10);

ここで、が数値の場合、問題なく計算さpairsれるため、具体的にゼロをチェックする必要はありません。0 * 2

counted_pairs = pairs * 2;
于 2012-12-06T22:42:46.943 に答える
1

値を追加するのではなく、文字列を連結しています。parseFloatまたはを使用parseIntして数字を追加します。

total_fishes = (parseFloat(males) + parseFloat(females) + parseFloat(counted_pairs));
于 2012-12-06T22:41:03.063 に答える
0

total_fishes = (オス + メス + カウントされたペア); を変更します。これに:

total_fishes = ((males * 1 + females * 1) * 1 + counted_pairs * 1);

これ機能します。奇妙に思えるかもしれませんが、* 1 + 値 * 1 を使用すると、Javascript が変数を数値に変換します。理由は説明できませんが、数年前に cPanel x でこのコードの平和を見ました。それはたくさん。

編集:

isNaN を使用して値が間違っているかどうかを確認できるユーザー入力を使用している場合、実際には違いがあります。エラーを抑制し、とにかく整数を作成しようとするため、parseInt を使用すると機能しません。

テストコード:

var males = "2,4";
var females = "3";
var counted_pairs = "33";

var result = ((males * 1 + females * 1) * 1 + counted_pairs * 1);
var resultb = (parseInt(males) + parseInt(females * 1) + parseInt(counted_pairs));

if (isNaN(result)) {
 alert("Input is wrong my method");   
}

if (isNaN(resultb)) {
 alert("Input is wrong using parseint");   
}​

結果: 最初の警告画面のみが表示されます。

于 2012-12-06T22:40:23.213 に答える