zoukankan      html  css  js  c++  java
  • 实现加减乘除的插件

    因为在做带小数的计算时,总会出现10.999999998这种类似的结果。

    故有了这个插件。

    直接上代码:

    index.html

    <body>
      <input type="text" id="number" placeholder="1,2,3">
      <br>
      <select name="" id="arith">
        <option value="0">加法</option>
        <option value="1">减法</option>
        <option value="2">乘法</option>
        <option value="3">除法</option>
      </select>
      <br>
      <button id="btn">计算</button>

      <div id="result"></div>

      <script>
      document.getElementById('btn').onclick = function(){
        var number = document.getElementById('number').value;
        var meth = document.getElementById('arith').value;
        var result = document.getElementById('result');
        if(number !== ''){
          var arr = number.split(',');
          switch (meth){
            case "0":
            try{
              result.innerHTML = arith.sum.apply(arith,arr);
            }catch(e){
              console.log(e.name+': '+ e.msg);
            }
            break;
            case "1":
            try{
              result.innerHTML = arith.exc.apply(arith,arr);
            }catch(e){
              console.log(e.name+': '+ e.msg);
            }
            break;
            case "2":
            try{
              result.innerHTML = arith.mul.apply(arith,arr);
            }catch(e){
              console.log(e.name+': '+ e.msg);
            }
            break;
            case "3":
            try{
              result.innerHTML = arith.div.apply(arith,arr);
            }catch(e){
              console.log(e.name+': '+ e.msg);
            }
            break;
            default:
            throw{
              name:'Error',
              msg:meth
            }
            break;
           }
         }else{
           result.innerHTML = '请输入计算数';
         }
      }
      </script>

    </body>

    arith.js

    var arith={
      data:[],
      /**检查入参的数据类型 */
      _int: function(){
        var i,flag=true,arr=[],c=0;
        for(i=0;i<this.data.length;i++){
          var num = this.data[i].toString().replace(/ +/g,'');
          num = num.replace(/,/g,'');
          if(isNaN(Number(num))){
            flag = false;
            return false;
          }
          arr.push(Number(num));
          var d;
          try{
            d = this.data[i].toString().split('.')[1].length;
          }catch(e){
            d = 0;
          }
          c = Math.max(c,d);
        }
        if(flag){
          arr.max = c;
          return arr;
        }else{
          return false;
        }
      },
    /**加法 */
      sum: function(){
        this.data = arguments;
        if(this._int()){
          var data = this._int();
          var i,result=0;
            for(i=0;i<data.length;i++){
              var d;
              try{
                d = data[i].toString().split('.')[1].length;
              }catch(e){
                d = 0;
              }
              result += Number(data[i].toString().replace('.',''))*Math.pow(10,data.max - d);
            }
            return result/Math.pow(10,data.max);
          }else{
            throw{
              name:'Error',
              msg:'The arguments of function arith.sum is not Number'
            }
          }
      },
      /**减法 */
      exc: function(){
        this.data = arguments;
          if(this._int()){
            var data = this._int();
            var i,result = 'begain';
            for(i=0;i<data.length;i++){
              var d;
              try{
                d = data[i].toString().split('.')[1].length;
              }catch(e){
                d = 0;
              }
            if(result == 'begain'){
              result = Number(data[i].toString().replace('.',''))*Math.pow(10,data.max - d);
            }else{
              result += -Number(data[i].toString().replace('.',''))*Math.pow(10,data.max - d);
            }
          }
          return result/Math.pow(10,data.max);
          }else{
            throw{
              name:'Error',
              msg:'The arguments of function arith.exc is not Number'
            }
          }
        },
      /**乘法 */
      mul: function(){
        this.data = arguments;
        if(this._int()){
          var data = this._int();
          var i,result='begain',s=0;
          for(i=0;i<data.length;i++){
            var d;
            try{
              d = data[i].toString().split('.')[1].length;
            }catch(e){
              d = 0;
            }
            s += d;
            if(result == 'begain'){
              result = Number(data[i].toString().replace('.',''));
            }else{
              result = result*Number(data[i].toString().replace('.',''));
            }
          }
          return result/Math.pow(10,s);
          }else{
            throw{
              name:'Error',
              msg:'The arguments of function arith.mul is not Number'
            }
          }
        },
      /**除法 */
      div: function(){
        this.data = arguments;
        if(this._int()){
          var data = this._int();
          var i,result='begain',s=0,m=0;
          for(i=0;i<data.length;i++){
            var d;
            try{
              d = data[i].toString().split('.')[1].length;
            }catch(e){
              d = 0;
            }
            if(result == 'begain'){
              s = d;
              result = Number(data[i].toString().replace('.',''));
            }else{
              m += d;
              result = result/Number(data[i].toString().replace('.',''));
             }
            }
            return result*Math.pow(10,m-s);
            }else{
              throw{
                name:'Error',
                msg:'The arguments of function arith.div is not Number'
              }
            }
          }
        }

    欢迎小伙伴们试用和提bug

  • 相关阅读:
    HTML
    Java 1.8 新特性
    Java 反射
    子网与超网
    Java 网络编程
    Java 单例模式、枚举
    Java 线程生命周期、线程池
    Java 多线程
    Java Properties、流对象关闭格式
    基础练习 十六进制转八进制
  • 原文地址:https://www.cnblogs.com/xuniannian/p/9566177.html
Copyright © 2011-2022 走看看