我有一个同学最近在自学JavaScript,偶尔遇到问题了会让我帮忙解决,虽然我也是一个JavaScript菜鸟,但是我还是很乐意帮忙,这样不仅可以帮到别人,也可以让自己在解决问题的过程中学到更多知识。先来看看他的代码吧!

  HTML代码:

<input type='text' id='txt1' />
<select id='select'>
<option value='+'>+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type='text' id='txt2' />
<input type='button' value=' = ' onclick="count()" /> <!--通过 = 按钮来调用创建的函数,得到结果-->
<input type='text' id='fruit' />

  JavaScript代码:

function count(){
//获取第一个输入框的值
var num1 = document.getElementById("txt1");
//获取第二个输入框的值
var num2 = document.getElementById("txt2");
//获取选择框的值
var fuhao = document.getElementById("select").value;
function yunsuan(){
  var num;
  if (fuhao == "+") {
   num = num1 + num2;
   }else if(fuhao == "-"){
   num = num1 - num2;
  }else if(fuhao == "*"){
   num = num1 * num2;
   }else if(fuhao == "/"){
   num = num1 / num2;
   }
}
document.getElementById("fruit").value = num;
}

  看完代码后,我发现了三个问题,分别为:

  • num1和num2获取的是元素节点,而不是文本框的值,所以应该这样写:var num1 = document.getElementById("txt1").value; num2同num1
  • num是一个局部变量,document.getElementById("fruit").value无法得到num的值
  • 在JavaScript中+可以用来连接字符串,因此这里需要进行转换

  修改后的JavaScript代码如下:

function count(){
var num;
//获取第一个输入框的值
var num1 = parseInt(document.getElementById("txt1").value);
//获取第二个输入框的值
var num2 = parseInt(document.getElementById("txt2").value);
//获取选择框的值
var fuhao = document.getElementById("select").value;
function yunsuan(){
  if (fuhao == "+") {
   num = num1 + num2;
   }else if(fuhao == "-"){
   num = num1 - num2;
  }else if(fuhao == "*"){
   num = num1 * num2;
   }else if(fuhao == "/"){
   num = num1 / num2;
   }
}
document.getElementById("fruit").value = num;
}

  但是,经过测试我发现得到的答案永远是undefined。所以我将JavaScript代码进一步修改为:

function count(){
var num;
//获取第一个输入框的值
var num1 = parseInt(document.getElementById("txt1").value);
//获取第二个输入框的值
var num2 = parseInt(document.getElementById("txt2").value);
//获取选择框的值
var fuhao = document.getElementById("select").value;
switch(fuhao){
case "+":
num = num1 + num2;
break;
case "-":
num = num1 - num2;
break;
case "*":
num = num1 * num2;
break;
case "/":
num = num1 / num2;
}
document.getElementById("fruit").value = num;
}

  这次可以得到正确答案了,但是无法进行小数运算,所以我用Number()方法替换parseInt()方法,但是Number无法将字符串中的非数字字符过滤掉,所以我用parseFloat()来代替。这下可以很好地解决问题了。

  知识链接:

  parseInt():parseInt()函数可以解析一个字符串,并返回一个整数。它可接受两个参数,第一个参数是要解析的字符串,第二个参数是要解析的数字的基数,范围为2~36。如果省略该参数或其值为0,则以十进制来解析;如果该参数小于2或者大于36,则parseInt()将返回NaN。该方法可以将非数字字符(非首个字符)过滤掉,例如:parseInt("40d"),返回40,而parseInt("d40")则返回NaN。

  parseFloat():parseFloat())函数可以解析一个字符串,并返回一个浮点数。该函数在解析过程中遇到了正负号、数字、小数点或者科学计数法中的指数(e 或 E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数。同时参数字符串首尾的空白符会被忽略。

  Number():Number()函数把对象的值转换为数字。如果参数是Date对象,Number()返回1970年1月1日至今的毫秒数。如果对象的值无法转换为数字,那么Number()函数返回NaN。

  刚开始一直没弄明白为什么使用if...else总是得到undefined,经过反复的测试,终于得到了我想要的结果,代码如下:

function count(){
var num;
//获取第一个输入框的值
var num1 = parseFloat(document.getElementById("txt1").value);
//获取第二个输入框的值
var num2 = parseFloat(document.getElementById("txt2").value);
//获取选择框的值
var fuhao = document.getElementById("select").value;
if (fuhao == "+") {
num = num1 + num2;
}else if(fuhao == "-"){
num = num1 - num2;
}else if(fuhao == "*"){
num = num1 * num2
}else{
num = num1 / num2;
}
document.getElementById("fruit").value = num;
}

parseInt()、parseFloat()与Number()的比较的更多相关文章

  1. parseInt parseFloat isNaN Number 区别和具体的转换规则及用法

    原文链接:https://blog.csdn.net/wulove52/article/details/84953998 在javascript 我经常用到,parseInt.parseFloat.N ...

  2. parseint和parsefloat总结number。隐形转换

    parseint:会认识一些字符+.-.空格,其他的就会截止譬如23hudhchauch结果为:23,对于boollen类型不能转换为1或是0. number:是对整体的转换.对true的转换为1. ...

  3. Number,parseInt,parseFloat函数

    Number,parseInt,parseFloat函数 console.group('Number'); console.log(Number( console.log(Number( consol ...

  4. Number(),parseInt(),parseFloat(),Math.round(),Math.floor(),Math.ceil()对比横评

    首先,这些处理方法可分为三类. 1,只用来处理数字取整问题的:Math.round(),Math.floor(),Math.ceil(): 2,专门用于把字符串转化成数值:parseInt(),par ...

  5. isNaN与parseInt/parseFloat

    isNaN 返回一个 Boolean 值,指明提供的值是否是保留值 NaN (不是数字). NaN 即 Not a Number isNaN(numValue) 必选项 numvalue 参数为要检查 ...

  6. js字符转换成整型 parseInt()函数规程Number()函数

    今天在做一个js加法的时候,忘记将字符转换成整型,导致将加号认为是连接符,  在运算前要先对字符井行类型转换,使用parseInt()函数   使用Number()将字符转换成int型效果更好

  7. parseFloat 和 Number isNaN 转换

    parseFloat(true) // NaN Number( parseFloat(null) // NaN Number( parseFloat('') // NaN Number('') par ...

  8. js parseInt();parseFloat;Number()

    1:  parseInt( numString [, radix ] ) [测试浏览器:chromium && firefox] ①parseInt()函数用于将字符串转换为(十进制) ...

  9. parseInt、parseFloat、Number、Boolean、valueOf总结

    parseInt(string, radix) 功能: 将字符串转换为十进制的数字 radix: string的进制,没有时根据string进行判断: 1~9开头 十进制 0x开头 16进制 0开头 ...

随机推荐

  1. 什么是IDOC,以及IDOC的步骤

    创建IDOC:   第一步:WE31 创建IDOC所包含的字段.   第二步:WE30 创建IDOC 把Segment分配给IDOC   第三步:WE81  创建信息类型   第四步:WE82   把 ...

  2. Centos中安装vim

    Centos, 默认没有安装VIM, 所以要当然要安装了, 直接yum install vim是不行的, 首先: yum install vim* 会看到vim-enhanced这个包,没错, 我们要 ...

  3. Hive权限介绍

    一.开启权限 眼下hive支持简单的权限管理,默认情况下是不开启.这样全部的用户都具有同样的权限.同一时候也是超级管理员.也就对hive中的全部表都有查看和修改的权利,这样是不符合一般数据仓库的安全原 ...

  4. linux下web压力测试工具ab使用及详解

    APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下.格式: ./ab [options] [http://]hostname[:port]/path参数: ...

  5. 深入理解Binder(一),从AIDL谈起

    打算写一篇Binder介绍的文章,仔细想想一篇文章貌似很难厘清,于是我打算从AIDL入手,本篇先来简单介绍下AIDL的使用,然后在此基础上我们继续来研究Binder的工作原理.小伙伴们都知道,AIDL ...

  6. 定位CoreLocation

    一.定位 iOS三种定位方式: CoreLocation 按定位的准确性: GPS(Global Positioning System全球定位系统); 蜂窝式基站; wifi; 定位顺序:1. 首选G ...

  7. 模仿京东顶部搜索条效果制作的一个小demo

    最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 #define kScreenWidth [UIScreen mainScreen].bounds.s ...

  8. Hibernate学习笔记--------4.查询

    一.Get/Load Get方法是立即检索,而load是延迟检索,他们都是根据主键进行查询.在<class>标签中,若把lazy属性改为false,load方法就会立即检索,class中的 ...

  9. 【排障】Outlook Express 2G收件箱大小限制

    Outlook Express 2G收件箱大小限制 文:铁乐猫 ----------------------------- Outlook Express(以下简称OE)客户端收件箱大于或接近2G时, ...

  10. MATLAB的循环结构

    循环结构有两种基本形式:while 循环和for 循环.两者之间的最大不同在于代码的重复是如何控制的.在while 循环中,代码的重复的次数是不能确定的,只要满足用户定义的条件,重复就进行下去.相对地 ...