Javascript中用于处理货币格式的总计算(MinusSignNegative)

时间:2012-06-13 15:26:10

标签: javascript regex

我目前有一个javascript代码,在处理货币格式时计算一个只读文本字段的总计,即$ 500.00。我遇到的问题是当以货币格式(MinusSignNegative)输入多个负数时,如何处理计算,即($ 500.00)而不是 - $ 500.00。我目前在总计中遇到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>

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);
}