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

Javascript将变量视为字符串,为什么?,javascript,string,variables,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 */ 根据: toFixed()返回: 不使用指数的数字的字符串表示形式 符号,小数点后正好有数

变量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 */
根据:

toFixed()
返回:

不使用指数的数字的字符串表示形式 符号,小数点后正好有数字

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

在我看来,这是有意义的,因为Javascript的固有数字类型无法存储特定数量的小数位数,因此字符串将是存储该数字的最合适的数据结构

我建议您在调用
toFixed()
之前进行所有添加,因为该方法最适合格式化显示输出。
var税率=0.055;
var小计=21.78;
风险值税=(税率*小计)。toFixed(2),
总价=((1+税率)*小计)。固定(2);

文件。写入(总价).toFixed()方法返回一个字符串。尝试将该方法应用于所有其他计算之后的最后一步。

根据我的经验,如果有机会,Javascript会将“+”符号视为串联而不是加法。它不止一次让我发疯。我通常会这样做,而不是偶然串联:

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

这里有一个简单的解决方案。将“+”放在tax变量前面,将其转换为数字

var y = 21.78;
var tax = (0.055*y).toFixed(2);
var totalprice = y+ (+tax);
totalprice === 22.98;
如果您不希望在使用toFixed时出现任何舍入错误,那么在脚本中包含它的重新实现。

当字母替换值时,当您需要
+
时,用
1相乘

var totalprice = (y*1) + tax . 

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

@Radu否,只有一系列if-else语句。y总是等于这样一个数字,声明它时不涉及其他变量。要回答一个问题,这个问题必须是可重复的。请包括:完整、简洁、有代表性。阅读更多指南。@outis-ooh我喜欢这个答案。我必须把它保存在某个地方,这样我才能重新使用它。实际上,看起来示例代码已经完成了。三行就足够了,这是非常罕见的,我马上得出结论,那不是。他本来可以用一行逗号来完成的。typeof是你的朋友。在谷歌上搜索一两个小时JS的动态类型转换的工作原理也是如此。比用解析槌敲击任何东西都要容易得多,在这种情况下,解析槌会给您带来问题。您将需要对带小数的数字使用parseFloat。parseInt(0.55)返回0。您测试过这个吗?它不起作用
y
已经是一个数字,将其乘以1不会起任何作用。问题在于
tax
是一个字符串。还有,这一行末尾的句点是什么?