0

私は現在、$500.00 などの通貨形式を扱うときに読み取り専用のテキスト フィールドに総計を計算する以下の JavaScript コードを持っています。私が直面している問題は、-$500.00 ではなく ($500.00) などの通貨形式 (MinusSignNegative) で複数の負の数が入力された場合の計算の処理方法です。現在、総計で NaN エラーが発生しています。

この正規表現で処理できると思いますが、実装方法がわかりません。http://www.regexlib.com/(X(1)A(bk8AHOFYowt7XHOC4WUCtfdM2LhlaovTNInhWLTrzAeoeq-c53XkkdwLD-WDe3OgQtJ7BLHSs0P-u-RrLbfVZaQIHkBH2exYGw0qtz6nqSamZNVqtnyufo9Y3nrEq5mq-mry63HY4Nnv0dfsQOZzKvuwcKAuwigyyQva-67laxr-ModxTQESW8fXx2XJL_0L0))/REDetails.aspx?regexp_id=625&AspxAutoDetectCookieSupport=1

誰でも解決策を提供できますか?

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function total(what,number) {
        var grandTotal = 0;
        for (var i=0;i<number;i++) {
           if (what.elements['price' + i].value.replace(/\$|\,/g,'') == '')
               what.elements['price' + i].value.replace(/\$|\,/g,'') == '0.00';
           grandTotal += (what.elements['price' + i].value.replace(/\$|\,/g,'') - 0);
        }
        what.grandTotal.value = (Math.round(grandTotal*100)/100);
        }
    //-->
    </SCRIPT>

    <FORM NAME="myName">
    Tax Due/Refund: <input TYPE="text" NAME="price0" VALUE="" SIZE="10" class='currency' onChange="total(this.form,3)"><BR>
    Interest: <input TYPE="text" NAME="price1" VALUE="" SIZE="10" class='currency' onChange="total(this.form,3)"><BR>
    Penalty: <input TYPE="text" NAME="price2" VALUE="" SIZE="10" class='currency' onChange="total(this.form,3)"><BR>
    Total Amount Assessed: <INPUT TYPE="TEXT" NAME="grandTotal" class='currency' SIZE="25" READONLY="readyonly" style="background:#eee none; color:#222; font-weight:bold">
    </FORM>
4

2 に答える 2

0

ドル記号の左側の数値から負の記号を移動しようとしている場合は、合計値フィールドに書き込むときに移動します。

function total(what, number){
    var grandTotal= 0,  i= number, val, sign;
    while(i){
        val= what.elements['price' + i--].value.replace([$, ]+/g,'') ;
        grandTotal+= parseFloat(val) || 0;
    }
    sign= grandTotal<0? '-' :'';
    what.grandTotal.value=  sign+'$'+ Math.abs(Math.round(grandTotal*100)/100);
}
于 2012-06-13T15:53:17.057 に答える
0

その正規表現の有無にかかわらず、それを行うことができます。

それなし:

fieldValue = field.value; // "(500.00)"
// search for a "(" char
if (fieldValue.indexOf("(") >= 0) {
    // remove all chars, but numbers and dots
    fieldValue = fieldValue.replace(/[^0-9.]/ig, "");
    // 500.00
    numberFieldValue = Number(fieldValue) * -1;
}

と:

fieldValue = field.value; // "(500.00)"
// test if the value matches that pattern for negative numbers
if (fieldValue.match(/PUT_THAT_REGEX_HERE/g)) {
    // remove all chars, but numbers and dots
    fieldValue = fieldValue.replace(/[^0-9.]/ig, "");
    // 500.00
    numberFieldValue = Number(fieldValue) * -1;
}

次のようになります。

function total(what,number) {
    var grandTotal = 0;
    for (var i=0;i<number;i++) {

        fieldValue = what.elements['price' + i].value; // "(500.00)" 
        // search for a "(" char 
        if (fieldValue.indexOf("(") >= 0) { 
            // remove all chars, but numbers and dots 
            fieldValue = fieldValue.replace(/[^0-9.]/ig, ""); 
            // 500.00 
            numberFieldValue = Number(fieldValue) * -1; 
        } else if (fieldValue.replace(/\$|\,/g,'') == '') {
            numberFieldValue = 0;
        } else {
            numberFieldValue = number(fieldValue.replace(/\$|\,/g,''));
        }

        grandTotal += numberFieldValue ;
    }
    what.grandTotal.value = (Math.round(grandTotal*100)/100);
}
于 2012-06-13T15:41:15.547 に答える