由于逗号,Javascript计算给出了错误的答案

时间:2015-08-24 01:01:17

标签: javascript

我的计算工作正常,直到达到一千个分隔符,这是一个逗号。我尝试了一些试图摆脱逗号的东西,但我似乎无法做到正确。以下是我尝试的最后一件事,那就是完全失败。 '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;
}

2 个答案:

答案 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