Javascript将变量视为字符串,为什么?

时间:2012-04-09 21:20:20

标签: javascript string variables

我有变量y,这是一个小计。它的值根据html的情况而有所不同,但在整个脚本中我声明它是这样的:

var y = 21.78;

等。为什么在我的最后一个等式中,我将总和加起来,当我想添加值时,它会将它们视为字符串?

var tax = (0.055*y).toFixed(2);
var totalprice = y+tax;
/* totalprice holds "21.781.20" instead of 22.98 */

5 个答案:

答案 0 :(得分:10)

根据:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number/toFixed

toFixed()返回:

  

不使用指数的数字的字符串表示形式   符号,小数位后面的位数正好。

因此,y+tax被强制转换为字符串,因为其中一个操作数是字符串。

在我看来,这是有道理的,因为Javascript的内部数字类型不能存储特定数量的小数位数,因此字符串将是最适合存储它的数据结构。

我建议您在调用toFixed()之前完成所有添加,因为该方法最适合格式化显示输出。

var taxRate = 0.055;
var subtotal = 21.78;

var tax = (taxRate * subtotal).toFixed(2),
totalprice = ((1+taxRate) * subtotal).toFixed(2);
document.write(totalprice);

答案 1 :(得分:3)

.toFixed()方法返回一个字符串。尝试将该方法应用为所有其他计算后的最后一步。

答案 2 :(得分:2)

这是一个简单的修复。将“+”放在税收变量的前面,将其转换为数字。

var y = 21.78;
var tax = (0.055*y).toFixed(2);
var totalprice = y+ (+tax);
totalprice === 22.98;

如果在使用toFixed时不想要任何舍入错误,请在脚本中包含它的重新实现。 http://bateru.com/news/2012/03/reimplementation-of-number-prototype-tofixed/

答案 3 :(得分:0)

根据我的经验,如果有任何可能的机会,Javascript会将“+”符号视为连接而不是添加。它不止一次地让我疯狂。我通常会这样做,而不是偶然连接:

var totalprice = parseInt(y)+parseInt(tax);

答案 4 :(得分:-1)

当字母替换值时,如果您需要1,请与+相乘。

var totalprice = (y*1) + tax . 

其他操作数工作正常,它只是+操作数,当变量替换值时需要特殊处理。