繁体   English   中英

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

[英]Javascript is treating variables as Strings, why?

我有变量 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 */

根据:

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

toFixed()返回:

数字的字符串表示形式,不使用指数表示法且小数点后有 digits 数字。

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

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

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

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

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

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

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/

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

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

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

var totalprice = (y*1) + tax . 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM