添加数字的意外结果:“79.0014.95”,为什么?

时间:2011-11-17 00:14:21

标签: javascript

所以我有一个脚本抓取<tr>并迭代它以使用jquery获取我需要的所有变量。其中一个是价格,其中td的文本是79.00所以我抓住它并将其存储为var price。我现在需要将其添加到我决定的另一个数字,让我们说14.95。我认为可行的是

var val1 = parseInt(price);
val1 = val1.toFixed(2);
var sub = val1 + 14.95;

但是输出79.0014.95它只是将它们连接起来,好像它是一个字符串。这是我正在使用的代码。

$("#phrases tbody tr").live('click', function() {
            var nTds = $('td', this);
            var phrase = $(nTds[0]).text();
            var phrase_id = $(nTds[0]).attr("name");
            var searches = $(nTds[4]).text();
            var price = $(nTds[5]).text(); //is 79.00
            var val1 = parseInt(price);
            val1 = val1.toFixed(2);
            var val2 = 14.95;
            val2 = val2.toFixed(2);
            var sub = val1 + val2;

现在当sub输出时它是79.0014.95。任何帮助将不胜感激,因为这让我疯了。谢谢。

4 个答案:

答案 0 :(得分:2)

toFixed()返回一个字符串。 "string" + anything等于"stringanything"

var a = (123).toFixed(2);
var b = a + 123;
console.log(b); // "123.00123"

var c = 123;
var d = c + 123;
console.log(d.toFixed(2)); // "246.00"

之后将数字添加到一起,而不是之前。

答案 1 :(得分:1)

Number.toFixed()方法格式化数字并返回其字符串表示。

至少一个操作数是字符串时,JavaScript的+运算符会进行连接。

执行完所有算术后,您应该进行格式化。

答案 2 :(得分:1)

如果任一操作数是字符串,+运算符将执行字符串连接。 toFixed()方法返回数字的字符串表示。因此,你得到的结果。

您需要先进行计算,然后在最终结果上调用toFixed()

另外,为什么在处理可能(大概)小数点后有0以外的价格时使用parseInt()?您可能需要parseFloat(),或者您可以使用一元+运算符(var n = (+"123.32");)将字符串转换为数字。

答案 3 :(得分:0)

toFixed()返回一个字符串。

进行数学运算后进行填充。