hixon 发表于 2020-5-29 10:25:11

为什么两个变量相加变成字符串相加了?

本帖最后由 hixon 于 2020-5-29 11:04 编辑

比如下面的代码,我们希望把变量pi取小数点后两位再跟变量a相加, 把结果(3.14 + 100 等于 103.14)显示在界面标签label上,但是实际显示的结果是:1003.14
var a = 100;
var pi = 3.1415926;
pi = pi.toFixed(2); // '3.14'
a = a + pi; // '1003.14'
ui.main.label.text = a; // '1003.14'
为什么结果不是我们预期的?问题在于上面的第3行代码:
pi = pi.toFixed(2);

toFixed()方法返回的结果是一个字符串,所以变量pi变成字符串'3.14'了,第4行代码就变成了 '3.14' + 100, 而JavaScript在做加法运算时如果表达式里只要包含有一个字符串变量,就会优先做字符串的相加。所以 '3.14' + 100 等于 '1003.14'。
那么我们应该怎么处理才能得到我们想要的结果呢?很简单,可以在最后显示的地方再调用toFixed,代码修改如下:
var a = 100;
var pi = 3.1415926;
a = a + pi; // 103.1415926
ui.main.label.text = a.toFixed(2); // 103.14
或者把pi通过方法parseFloat()又转换回浮点数,代码修改如下:
var a = 100;
var pi = 3.1415926;
a = a + parseFloat(pi); // 100 + 3.14 = 103.14
ui.main.label.text = a.toFixed(2); // 103.14








hixon 发表于 2020-5-29 12:26:14

我们可以通过util.console.log来打印看一下pi变量前后的类型变化:
    var pi = 3.1415926;
    util.console.log('-1-' + (typeof pi));
    pi = pi.toFixed(2); // '3.14'
    util.console.log('-2-' + (typeof pi));

w100 发表于 2020-5-29 14:32:38

学习了。。。
页: [1]
查看完整版本: 为什么两个变量相加变成字符串相加了?