Javascript计算由于逗号而给出错误答案

Javascript计算由于逗号而给出错误答案,javascript,Javascript,我有一个计算,它运行良好,直到它达到1000个分隔符,这是一个逗号。我尝试了一些方法试图去掉逗号,但我似乎做不好。下面是我最后尝试的一件事,完全失败了。“tot_amount”就是我需要去掉逗号的那个。我认为我走错了方向,如果没有额外的“tot”变量,它应该是可行的。请帮忙 function updateDue() { var total = parseInt(document.getElementById("tot_amount").value); var val2 = parseI

我有一个计算,它运行良好,直到它达到1000个分隔符,这是一个逗号。我尝试了一些方法试图去掉逗号,但我似乎做不好。下面是我最后尝试的一件事,完全失败了。“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;
}
替换 您的代码仅删除了一个逗号,请尝试改用此逗号:

total.replace(/,/g, "");
最好的方法是删除所有非数字安全的内容并使用:

+total.replace(/[^\de.-]/gi, "")
如你所见,我有一个g

g代表全局,意味着它将取代所有逗号,而不仅仅是第一个逗号

字符串转换为整数 而不是:

var total = parseInt(document.getElementById("tot_amount").value);
var tot = total.replace(",","");
解析后必须将其设置为整数。解析数字的一种简单方法是使用+

您的代码: 您可以将函数设置为:

function updateDue() {
    document.getElementById("remainingval").value = 
        +document.getElementById("tot_amount").value.replace(/[^\de.-]/gi, "") -
        +document.getElementById("eftposamount").value.replace(/[^\de.-]/gi, "")
         || 0
}
| | 0将不再需要ifs。

更换 您的代码仅删除了一个逗号,请尝试改用此逗号:

total.replace(/,/g, "");
最好的方法是删除所有非数字安全的内容并使用:

+total.replace(/[^\de.-]/gi, "")
如你所见,我有一个g

g代表全局,意味着它将取代所有逗号,而不仅仅是第一个逗号

字符串转换为整数 而不是:

var total = parseInt(document.getElementById("tot_amount").value);
var tot = total.replace(",","");
解析后必须将其设置为整数。解析数字的一种简单方法是使用+

您的代码: 您可以将函数设置为:

function updateDue() {
    document.getElementById("remainingval").value = 
        +document.getElementById("tot_amount").value.replace(/[^\de.-]/gi, "") -
        +document.getElementById("eftposamount").value.replace(/[^\de.-]/gi, "")
         || 0
}
| | 0将不再需要ifs。

在逗号分隔的字符串上调用parseInt将得到意外的结果:

parseInt('1,000'); // => 1
相反,您希望删除逗号,然后解析整数:

var i = +('1,000'.replace(/,/g, '')); // => 1000
//part只是RegExp符号,后面的g是一个标志,告诉解析器查找表达式的全局实例。在您的情况下,您希望删除所有逗号,因此g标志是合适的

为了在代码中保存7个字符,只需使用+将值强制为整数,而不必调用parseInt。

对逗号分隔的字符串调用parseInt将产生意外结果:

parseInt('1,000'); // => 1
相反,您希望删除逗号,然后解析整数:

var i = +('1,000'.replace(/,/g, '')); // => 1000
//part只是RegExp符号,后面的g是一个标志,告诉解析器查找表达式的全局实例。在您的情况下,您希望删除所有逗号,因此g标志是合适的


为了在代码中保存7个字符,只需使用+将值强制为整数,而不是调用parseInt。

尝试使用:total.replace、、g,而不是在尝试替换逗号之前调用parseInt。在试图解析为整数之前,您需要先替换逗号。@vihan我使用了其中的一部分来解决我的问题,它起了作用,因此我取出了另一个变量,现在有一行var total=parseIntdocument.getElementByIdtot_amount.value.replace。。。。。。g是干什么的?@Kilisi用g替换所有逗号。它代表global@vihan-只接受2个参数,而不是3个。您的g标志被忽略。请尝试使用:total.replace、、g,而不是在尝试替换逗号之前调用parseInt。在试图解析为整数之前,您需要先替换逗号。@vihan我使用了其中的一部分来解决我的问题,它起了作用,因此我取出了另一个变量,现在有一行var total=parseIntdocument.getElementByIdtot_amount.value.replace。。。。。。g是干什么的?@Kilisi用g替换所有逗号。它代表global@vihan-只接受2个参数,而不是3个。你的g标志被忽略了。我会接受这个正确的答案,只要它让我,快速的问题,你的正则表达式的g'看起来有一个未替换的。在[^\de.-]中。这将匹配除换行符以外的任何字符,换行符在反转时将不会像预期的那样匹配。还值得注意的是,parseInt和+在语义上是不同的,特别是在指数、小数和基数(如八进制)方面。@skeggse是的,但在极少数情况下是重要的。这个不是未设场景的,因为它位于字符类中,它将与literal@vihan哦,对了。很抱歉我提出语义是因为它在处理未初始化的数据时变得更加重要。我会接受这个正确的答案,只要它允许我,快速提问,你的正则表达式的g'看起来有一个未替换的。在[^\de.-]中。这将匹配除换行符以外的任何字符,换行符在反转时将不会像预期的那样匹配。还值得注意的是,parseInt和+在语义上是不同的,特别是在指数、小数和基数(如八进制)方面。@skeggse是的,但在极少数情况下是重要的。这个不是未设场景的,因为它位于字符类中,它将与literal@vihan哦,对了。很抱歉我提出了语义,因为它在处理未初始化的数据时变得更加重要。