为了账号安全,请及时绑定邮箱和手机立即绑定

为什么老是算错?

11减2或者减2以上的数 都等于零,还有随机取几个大点的数就算不了

正在回答

4 回答

这是老师的减法源码

"subNum": function(p1, p2) {
           //如果传入的数字不为空,使用传入的数字,否则为0
           var intResult = 0;
           p1 = (p1 == undefined) ? 0 : p1;
           p2 = (p2 == undefined) ? 0 : p2;
           if (p1 > p2) { //如果传入的参数前者大于后者
               intResult = parseInt(p1) - parseInt(p2);
           }
           return intResult;
       }

有BUG,你一开始传进去的是二个字符串,所以在p1>p2的比较是按字符串来进行比较的,所以11-2时,不会走if块,直接就返回0了,如果要正常使用,就自己把值转化了再传进来就没问题了

$.subNum(parseInt($("#Text1").val()), parseInt($("#Text2").val()))

5 回复 有任何疑惑可以回复我~
#1

隐匿山猫 提问者

非常感谢!回答的很完美
2015-08-21 回复 有任何疑惑可以回复我~
#2

隐匿山猫 提问者

为什么有的时候它会识别成字符串,有的它会识别成数字?
2015-08-21 回复 有任何疑惑可以回复我~

你去了解下JS的字符串比较,他是一位位的比,比如11比2,是先将11中的第一个1和2比较,1<2,所以不运算,加个0就变成11和02比较,先比较1和0,1>0,所以会比较,好像是这么回事,哈哈,有点记不清了,记住规范,有关数学运算的,当然得是数字了,所以想也别想就该先转化成数字,转化失败就提示错误

1 回复 有任何疑惑可以回复我~

就是这段

 if (p1 > p2) { //如果传入的参数前者大于后者
               intResult = parseInt(p1) - parseInt(p2);
           }

如果true的情况下,进入if块,老师也是转化成数字再进行相减的

1 回复 有任何疑惑可以回复我~
#1

隐匿山猫 提问者

那为什么中间加个0也能正确运算? $.subNum($("#Text1").val(),'0'+ $("#Text2").val())
2015-08-21 回复 有任何疑惑可以回复我~

一直都是识别的字符串,有时候能正常运算是因为在JS中字符串也是可以用>号作比较,比如11>2会返回false,而33>2则会返回true

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
jQuery基础课程
  • 参与学习       154768    人
  • 解答问题       7184    个

加入课程学习,有效提高前端开发速度

进入课程

为什么老是算错?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信