Javascript中处理货币格式的总计计算(负)
我目前在下面有一个javascript代码,在处理货币格式(如$500.00)时,它将总计计算到一个只读文本字段中。我遇到的问题是,当以货币格式(MinusSignNegative)输入多个负数(即($500.00)而不是-500.00)时,如何处理计算。我目前在总计中得到一个NaN错误 我相信这个正则表达式应该处理它,但我不知道如何实现 有人能提供解决方案吗Javascript中处理货币格式的总计计算(负),javascript,regex,Javascript,Regex,我目前在下面有一个javascript代码,在处理货币格式(如$500.00)时,它将总计计算到一个只读文本字段中。我遇到的问题是,当以货币格式(MinusSignNegative)输入多个负数(即($500.00)而不是-500.00)时,如何处理计算。我目前在总计中得到一个NaN错误 我相信这个正则表达式应该处理它,但我不知道如何实现 有人能提供解决方案吗 <SCRIPT LANGUAGE="JavaScript"> <!-- function to
<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>
到期/退税:
兴趣:
惩罚:
分摊总额:
您可以使用或不使用该正则表达式
没有:
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;
}
与:
应该是这样的:
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);
}
函数总数(什么,数字){
var-grandTotal=0;
对于(var i=0;i=0){
//除去所有字符,但不包括数字和点
fieldValue=fieldValue。替换(/[^0-9.]/ig,”);
// 500.00
numberFieldValue=数字(fieldValue)*-1;
}else if(fieldValue.replace(/\$\\,/g',)=''){
numberFieldValue=0;
}否则{
numberFieldValue=number(fieldValue.replace(/\$\\,/g');
}
grandTotal+=numberFieldValue;
}
what.grandTotal.value=(数学四舍五入(grandTotal*100)/100);
}
如果您试图将负号从数字移到美元符号的左边,
在写入总值字段时执行此操作
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);
}
函数总数(什么,数字){
var grandTotal=0,i=数字、val、符号;
而(i){
val=what.elements['price'+i--].value.replace([$,]+/g',);
grandTotal+=parseFloat(val)| 0;
}
sign=grandTotal感谢您的响应,但我如何将此解决方案应用到上面列出的函数total code中?您可以将此部分放入if子句上方的for
循环中,更改字段。value
forwhat.elements['price'+I].value
并使用变量fieldValue
而不是what.elements['price'+i].value
在其他行上。请查看我对您的问题的编辑。代码应该是这样的吗?我仍然收到该代码的NaN错误。当我将值插入字段时,此代码给了我一个函数预期错误,并且未填充grandTotal。请使用您的代码进行编辑,以便我可以查看发生了什么。顺便说一句,您不需要编码。我说得对吗?他想对所有字段的值求和,但其中一些字段的格式是这样的,例如($500.00)
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);
}