2012-06-13 45 views
0

我目前有一個javascript代碼,它在處理貨幣格式時計算總計爲只讀文本字段,即$ 500.00。我遇到的問題是,如果以貨幣格式(MinusSignNegative)(即$ 500.00)而不是 - $ 500.00輸入多個負數時如何處理計算。我目前在總計中發生NaN錯誤。用JavaScript處理貨幣格式的總計算(MinusSignNegative)

我相信這個正則表達式應該處理它,但我不知道如何實現。 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> 

回答

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); 
} 
+0

感謝您的答覆,但我如何將此解決方案應用到上面列出的函數總代碼中? – BvilleBullet

+0

你可以把這個部分放在'for'循環中,就在if子句之上,改變'what.elements ['price'+ i] .value'的'field.value'並使用變量'fieldValue'而不是' what.elements ['price'+ i] .value'在其他行上。 – rcdmk

+0

請參閱我的編輯您的問題。代碼應該是這樣嗎?我仍然得到該代碼的NaN錯誤。 – BvilleBullet

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); 
} 
+0

他想總結所有字段的值,但其中一些具有該格式,例如'($ 500.00)' – rcdmk