SizeCalculator怎么使用

发布时间:2019-07-29 16:54:19

Size Calculator怎么使用

推荐回答

首先,由于JS的存在数值的精度误差问题:

0.1+0.2   //0.300000000000000040.3-0.1   //0.19999999999999998

所以在编写计算器是应首先解决计算精度问题,以下四个代码段分别是js中精确的加减乘除运算函数

//浮点数加法运算function floatAdd(arg1,arg2){var r1,r2,m;try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}m=Math.pow(10,Math.max(r1,r2));return (arg1*m+arg2*m)/m}

//浮点数减法运算function floatSub(arg1,arg2){    var r1,r2,m,n;    try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}    try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}    m=Math.pow(10,Math.max(r1,r2));    //动态控制精度长度    n=(r1>=r2)?r1:r2;    return ((arg1*m-arg2*m)/m).toFixed(n);}

//浮点数乘法运算function floatMul(arg1,arg2){    var m=0,s1=arg1.toString(),s2=arg2.toString();    try{m+=s1.split(".")[1].length}catch(e){}    try{m+=s2.split(".")[1].length}catch(e){}    return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)}

//浮点数除法运算function floatDiv(arg1,arg2) {    var t1 = 0, t2 = 0, r1, r2;    try {t1 = arg1.toString().split(".")[1].length} catch (e) {}    try {t2 = arg2.toString().split(".")[1].length} catch (e) {}    with (Math) {        r1 = Number(arg1.toString().replace(".", ""));        r2 = Number(arg2.toString().replace(".", ""));        return (r1 / r2) * pow(10, t2 - t1);    }}

以下是详细的计算器代码: HTML5

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>简单计算器</title><link href="main.css" rel="stylesheet"></head><body><div id="calculator"><div id="calculator_container"><h3>计算器</h3><table id="calculator_table"><tbody><tr><td colspan="5"><input type="text" id="resultIpt" readonly="readonly" value="" size="17" maxlength="17" style="width:294px;color: black"></td></tr><tr><td><input type="button" value="←"       class="btn_color1 btn_operation"></td><td><input type="button" value="全清"     class="btn_color1 btn_operation"></td><td><input type="button" value="清屏"    ></td><td><input type="button" value="﹢/﹣"    class="btn_color2 btn_operation"></td><td><input type="button" value="1/×"     class="btn_color2 btn_operation"></td></tr><tr><td><input type="button"  value="7"     class="btn_color3 btn_number"></td><td><input type="button"  value="8"     class="btn_color3 btn_number"></td><td><input type="button"  value="9"     class="btn_color3 btn_number"></td><td><input type="button"  value="÷"    class="btn_color4 btn_operation"></td><td><input type="button"  value="%"    class="btn_color2 btn_operation"></td></tr><tr><td><input type="button"   value="4"   class="btn_color3 btn_number"></td><td><input type="button"   value="5"   class="btn_color3 btn_number"></td><td><input type="button"   value="6"   class="btn_color3 btn_number"></td><td><input type="button"   value="×"  class="btn_color4 btn_operation"></td><td><input type="button"   value="√"  class="btn_color2 btn_operation"></td></tr><tr><td><input type="button"  value="1"   class="btn_color3 btn_number"></td><td><input type="button"  value="2"   class="btn_color3 btn_number"></td><td><input type="button"  value="3"   class="btn_color3 btn_number"></td><td><input type="button"  value="-"  class="btn_color4 btn_operation"></td><td rowspan="2"><input type="button"  value="="  class="btn_color2" style="height: 82px" id="simpleEqu"></td></tr><tr><td colspan="2"><input type="button"  value="0"   class="btn_color3 btn_number" style="width:112px"></td><td><input type="button"  value="."   class="btn_color3 btn_number" ></td><td><input type="button"  value="+"  class="btn_color4 btn_operation"></td></tr></tbody></table></div></div><script type="text/javascript" src="calculator.js"></script></body></html>

CSS3

* {margin: 0;padding: 0;}#calculator{position: relative;margin: 50px auto;width: 350px;height: 400px;border: 1px solid gray;-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;-webkit-box-shadow: 2px 2px 4px gray;-moz-box-shadow: 2px 2px 4px gray;box-shadow: 2px 2px 4px gray;behavior:url("ie-css3.htc");  /*IE8-*/}#calculator_table{position: relative;margin: 10px auto;border-collapse:separate;border-spacing:10px 20px;}h3{position: relative;width: 60px;height: 30px;margin: 0 auto;}#calculator_table td{width: 50px;height: 30px;border: 1px solid gray;-webkit-border-radius: 2px;-moz-border-radius: 2px;border-radius: 2px;behavior:url("ie-css3.htc");  /*IE8-*/}#calculator_table td input{font-size: 16px;border: none;width: 50px;height: 30px;color: white;}input.btn_color1{background-color: orange;}input.btn_color2{background-color: #133645;}input.btn_color3{background-color: #59807d;}input.btn_color4{background-color: seagreen;}input:active{-webkit-box-shadow: 3px 3px 3px gray;-moz-box-shadow: 3px 3px 3px gray;box-shadow: 3px 3px 3px gray;behavior:url("ie-css3.htc");  /*IE8-*/}

JS

window.onload=function() {var resultIpt = document.getElementById("resultIpt"); //获取输出文本框var btns_number = document.getElementsByClassName("btn_number"); //获取数字输入按钮var btns_operation = document.getElementsByClassName("btn_operation"); //获取操作按钮var simpleEqu = document.getElementById("simpleEqu"); //获取"="按钮var temp = "";var num1= 0,num2=0;//获取第一个数for(var i=0;i<btns_number.length;i++){btns_number[i].onclick=function (){temp += this.value;resultIpt.value = temp;};}//对获取到的数进行操作for(var j=0;j<btns_operation.length;j++) {btns_operation[j].onclick = function () {num1=parseFloat(resultIpt.value);oper = this.value;if(oper=="1/×"){num1 = Math.pow(num1,-1); //取倒数resultIpt.value = num1.toString();}else if(oper=="﹢/﹣"){    //取相反数num1 = -num1;resultIpt.value = num1.toString();}else if(oper=="√"){      //取平方根num1 =Math.sqrt(num1);resultIpt.value = num1.toString();}else if(oper=="←"){    //删除个位resultIpt.value = resultIpt.value.substring(0, resultIpt.value.length - 1);}else if(oper=="全清"){  //清除数字resultIpt.value = "";}else{          //oper=="+" "-" "×" "÷" "%"时,继续输入第二数字temp = "";resultIpt.value = temp;}}}//输出结果simpleEqu.onclick=function(){num2=parseFloat(temp);  //取得第二个数字calculate(num1, num2, oper);resultIpt.value = result.toString();}};//定义一个计算函数function calculate(num1, num2, oper) {switch (oper) {case "+":result=floatAdd(num1, num2); //求和break;case "-":result=floatSub(num1, num2); //求差break;case "×":result=floatMul(num1, num2);  //求积break;case "÷":result=floatDiv(num1, num2);  //求商break;case "%":result=num1%num2;  //求余数break;}}//精确计算//浮点数加法运算function floatAdd(arg1,arg2){var r1,r2,m;try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}m=Math.pow(10,Math.max(r1,r2));return (arg1*m+arg2*m)/m}//浮点数减法运算function floatSub(arg1,arg2){var r1,r2,m,n;try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}m=Math.pow(10,Math.max(r1,r2));//动态控制精度长度n=(r1>=r2)?r1:r2;return ((arg1*m-arg2*m)/m).toFixed(n);}//浮点数乘法运算function floatMul(arg1,arg2){var m=0,s1=arg1.toString(),s2=arg2.toString();try{m+=s1.split(".")[1].length}catch(e){}try{m+=s2.split(".")[1].length}catch(e){}return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)}//浮点数除法运算function floatDiv(arg1,arg2) {var t1 = 0, t2 = 0, r1, r2;try {t1 = arg1.toString().split(".")[1].length} catch (e) {}try {t2 = arg2.toString().split(".")[1].length} catch (e) {}with (Math) {r1 = Number(arg1.toString().replace(".", ""));r2 = Number(arg2.toString().replace(".", ""));return (r1 / r2) * pow(10, t2 - t1);}}

以上问题属网友观点,不代表本站立场,仅供参考!