3

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

5 回答 5

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);

于 2012-04-09T21:23:24.077 回答
3

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

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/

于 2012-04-09T21:37:37.490 回答
3

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

于 2012-04-09T21:23:40.367 回答
0

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

var totalprice = parseInt(y)+parseInt(tax);
于 2012-04-09T21:25:09.133 回答
-1

当字母取代价值时,乘以1当你需要时+

var totalprice = (y*1) + tax . 

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

于 2016-06-18T13:01:05.517 回答