我的计算工作正常,直到达到一千个分隔符,这是一个逗号。我尝试了一些试图摆脱逗号的东西,但我似乎无法做到正确。以下是我尝试的最后一件事,那就是完全失败。 'tot_amount'是我需要删除逗号的那个。我想我走错了轨道,如果没有额外的'tot'变量,它应该是可行的。请协助。
function updateDue() {
var total = parseInt(document.getElementById("tot_amount").value);
var val2 = parseInt(document.getElementById("eftposamount").value);
var tot = total.replace(",","");
// to make sure that they are numbers
if (!tot) { tot = 0; }
if (!val2) { val2 = 0; }
var ansD = document.getElementById("remainingval");
ansD.value = tot - val2;
}
答案 0 :(得分:3)
您的代码只删除一个逗号,请尝试使用此代码:
total.replace(/,/g, "");
最好的方法是删除所有非数字安全的东西并使用:
+total.replace(/[^\de.-]/gi, "")
如您所见,我
g
g
代表全球,这意味着它将取代所有逗号而不仅仅是第一个。
而不是:
var total = parseInt(document.getElementById("tot_amount").value);
var tot = total.replace(",","");
解析后必须使它成为整数。解析数字的简短方法是使用+
var total = +document.getElementById("tot_amount").value.replace(/[^\de.-]/gi, "")
你可以这样做:
function updateDue() {
document.getElementById("remainingval").value =
+document.getElementById("tot_amount").value.replace(/[^\de.-]/gi, "") -
+document.getElementById("eftposamount").value.replace(/[^\de.-]/gi, "")
|| 0
}
||0
将不再需要ifs。
答案 1 :(得分:3)
在逗号分隔的字符串上调用parseInt
会给您带来意想不到的结果:
parseInt('1,000'); // => 1
相反,您要删除逗号,然后解析整数:
var i = +('1,000'.replace(/,/g, '')); // => 1000
//
部分只是RegExp
表示法,之后的g
是一个标志,告诉解析器查找表达式的全局实例。在您的情况下,您要删除所有逗号,因此g
标志是合适的。
为了在代码中保存7个字符,您只需将值强制为+
的整数,而不是调用parseInt
。