WeStudio技术社区

 找回密码
 立即注册

快捷登录

QQ登录

只需一步,快速开始

查看: 2398|回复: 2

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

[复制链接]

88

主题

123

帖子

918

积分

版主

Rank: 7Rank: 7Rank: 7

积分
918
发表于 2020-5-29 10:25:11 | 显示全部楼层 |阅读模式
本帖最后由 hixon 于 2020-5-29 11:04 编辑

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

为什么结果不是我们预期的?问题在于上面的第3行代码:
pi = pi.toFixed(2);

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

或者把pi通过方法parseFloat()又转换回浮点数,代码修改如下:
  1. var a = 100;
  2. var pi = 3.1415926;
  3. a = a + parseFloat(pi); // 100 + 3.14 = 103.14
  4. ui.main.label.text = a.toFixed(2); // 103.14
复制代码









回复

使用道具 举报

88

主题

123

帖子

918

积分

版主

Rank: 7Rank: 7Rank: 7

积分
918
 楼主| 发表于 2020-5-29 12:26:14 | 显示全部楼层
我们可以通过util.console.log来打印看一下pi变量前后的类型变化:
  1.     var pi = 3.1415926;
  2.     util.console.log('-1-' + (typeof pi));
  3.     pi = pi.toFixed(2); // '3.14'
  4.     util.console.log('-2-' + (typeof pi));
复制代码

typeof_pi.png
回复

使用道具 举报

11

主题

68

帖子

663

积分

超级版主

Rank: 8Rank: 8

积分
663
发表于 2020-5-29 14:32:38 | 显示全部楼层
学习了。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|物一世(北京)科技有限公司 ( 京ICP备20025895 )

GMT+8, 2022-8-19 20:12 , Processed in 1.006446 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表