2011-11-17 43 views
0

所以我有一个脚本抓住<tr>并遍历它来获得我需要使用jquery的所有变量。其中一个是价格,那个td的文本是79.00。所以我抓住它并将其作为var价格存储。我现在需要将其添加到我决定的另一个数字,比如说14.95。我认为会工作的是添加数字意外的结果:“79.0014.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; 

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

+3

这个问题让我想起这个:http://i.stack.imgur.com/TdrW7.gif – NullUserException

回答

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" 

所以做toFixed()后您添加数字加在一起,而不是之前。

+0

但是,当然,你会得到舍入误差。 – drdwilcox

+0

@NullUserExceptionఠ_ఠOP添加'toFixed()'的两个结果。 –

+0

@DaveNewton我明白了。 – NullUserException

0

toFixed()返回一个字符串。

做数学后填充。

1

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

JavaScript的+运算符无论何时连接,只要至少有一个的操作数是一个字符串。

一旦所有的算术运算完成,您都应该进行格式化。

1

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

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

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