V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wsrfde
V2EX  ›  问与答

[前端小白] JavaScript 的作业不会,求解答😅

  •  
  •   wsrfde · 2019-04-15 09:09:32 +08:00 via Android · 2337 次点击
    这是一个创建于 2052 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作业内容:

    参考现实生活中的计算器,用 JS 开发简易计算器,输入 x、y 以及运算符可以计算出数值,如用户输入 4,5,* 可以返回 20,输入 3,8,+返回结果为 11。

    要求:需要 HTML 页面,页面需要包括两个数字输入框、一个运算符下拉列表(+-*/)和一个按钮,当用户输入完成,点击按钮在页面输出计算后的值。

    作业提示:

    1.参考现实生活中的计算器,给按钮绑定 onclick 事件,写一个函数,把代码放在函数里

    2.加、减、乘、除 4 种运算都要有

    3.需要注意一些临界值和数据完整性判断,比如除数不能为 0 等,并且能够给与用户相应的提示

    4.注意用户的输入是随意的,尽量保证 JS 程序的完美,输出结果完全正确

    下面是我的代码,正常能计算的,但是作业第三条判断语句怎么写啊,比如除数不能为 0 给用户提示…

    <script type="text/javascript"> function calc(){ var num1 = parseFloat(document.getElementById('num1').value); var num2 = parseFloat(document.getElementById('num2').value); var operator = document.getElementById('op').value; var sum = jisuan(num1,num2,operator); alert(typeof sum); // if(sum=parseFloat(ture)){ // document.getElementById('result').innerText = sum; // }else{ // alert("非数字值"); // } } function jisuan(n1,n2,oper){ switch(oper){ case '+': return n1+n2; case '-': return n1-n2; case '*': return n1*n2; case '/': return n1/n2; default : return "未知操作符"; } } </script>
    num1:<input type="text" id="num1">
    
    <select id="op">
    
    	<option value="+">+</option>
    
    	<option value="-">-</option>
    
    	<option value="*">*</option>
    
    	<option value="/">/</option>
    
    </select>
    
    num2:<input type="text" id="num2">
    
    =<span id="result"></span>
    
    <button onclick="calc()">计算</button>
    
    15 条回复    2019-04-15 14:03:24 +08:00
    Tokin
        1
    Tokin  
       2019-04-15 09:16:37 +08:00   ❤️ 1
    `case '/':
    if(n1==0) return "除数不能为 0";
    return n1 / n2;`
    符合条件提前 return 就行了
    murmur
        2
    murmur  
       2019-04-15 09:17:53 +08:00
    自己的作业要自己做
    正常来说这个是要做 x 缀表达式?忘了叫啥了只有面试的时候看过
    但是既然是 js 是可以投机取巧
    错误的表达式书写 try 以下就出错了
    除 0 是===Infinity 的
    wsrfde
        3
    wsrfde  
    OP
       2019-04-15 09:25:12 +08:00 via Android
    @Tokin 测试了一下,谢谢啦~ 直接写 if 也可以是把,我以为要用 if else 哈哈,学傻了
    wsrfde
        4
    wsrfde  
    OP
       2019-04-15 09:26:41 +08:00 via Android
    @murmur 翻遍了笔记只想到要用 if 语句,但是不知道添加在哪,所以来问下大神嘿嘿
    leo108
        5
    leo108  
       2019-04-15 09:26:59 +08:00
    eval 了解一下
    tcdw
        6
    tcdw  
       2019-04-15 11:01:07 +08:00 via Android
    Number()
    isNaN()
    isFinite()
    limingjie138
        7
    limingjie138  
       2019-04-15 11:24:45 +08:00 via iPhone
    前两天留过这么一个作业 计算像#5 说的 eval 方法,剩下任何要求在计算前写判断就完事,比如小数点
    yamedie
        8
    yamedie  
       2019-04-15 11:25:39 +08:00   ❤️ 3
    还要考虑 0.1+0.2=0.30000000000000004 的问题
    aleko
        9
    aleko  
       2019-04-15 12:11:48 +08:00
    @yamedie 你是魔鬼吗
    rabbbit
        10
    rabbbit  
       2019-04-15 12:31:49 +08:00
    1 + '1' // '11'
    0.1 * 0.2 // 0.020000000000000004
    1 / 0 // Infinity
    1 + ~1 // -1
    1 + !1 // 1
    1 + 1^1 // 3
    1^1 // 0
    dog
    codermagefox
        11
    codermagefox  
       2019-04-15 13:02:28 +08:00
    @yamedie #8 第一反应就是这个,哈哈哈哈,JS 做计算器?计算个鬼啦
    azh7138m
        12
    azh7138m  
       2019-04-15 13:06:53 +08:00 via Android
    @codermagefox 恕我直言,要么你不是科班出身,要么你基础太差
    浮点精度问题是 IEEE 754 的问题,不是 js 独有,其他语言也会这样
    codermagefox
        13
    codermagefox  
       2019-04-15 13:07:54 +08:00
    @azh7138m #12 是是是,我基础太差了,其他语言也会这样
    yamedie
        14
    yamedie  
       2019-04-15 14:00:05 +08:00
    @codermagefox

    也有办法解的
    +(0.1+0.2).toFixed(8) === 0.3 // true
    codermagefox
        15
    codermagefox  
       2019-04-15 14:03:24 +08:00
    @yamedie #14 谢谢您,不过我真不需要科普
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3539 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:55 · PVG 12:55 · LAX 20:55 · JFK 23:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.