老师,为什么我用计算器计算1.33-0.88的时候会出错,用其他数字测试就不会,我错在哪里了?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | function init(){ var num=document.getElementById( "num" ); num.disabled= "disabled" ; num.value= "0" ; var btn_num0; var fuhao; var oButton=document.getElementsByTagName( "input" ); for ( var i=0;i<oButton.length;i++){ oButton[i].onclick= function (){ if (!isNaN( this .value)){ // num.value=(num.value+this.value)*1; if (isNull(num.value)) { num.value= this .value; } else { num.value=num.value+ this .value; } } else { var btn_num= this .value; switch (btn_num){ case "+" : btn_num0=Number(num.value); num.value=0; fuhao= "+" ; break ; case "-" : btn_num0=Number(num.value); num.value=0; fuhao= "-" ; break ; case "*" : btn_num0=Number(num.value); num.value=0; fuhao= "*" ; break ; case "/" : btn_num0=Number(num.value); num.value=0; fuhao= "/" ; break ; case "C" : alert( "C" ); break ; case "←" : alert( "←" ); break ; case "+/-" : alert( "+/-" ); break ; case "." : num.value=dec_num(num.value); break ; case "m" : alert( "m" ); break ; case "=" : switch (fuhao){ case "+" : num.value=btn_num0+Number(num.value); break ; case "-" : num.value=btn_num0-Number(num.value); break ; case "*" : num.value=btn_num0*Number(num.value); break ; case "/" : if (Number(num.value)==0){ num.value=0; alert( "除数不能为0" ); } else { num.value=btn_num0/Number(num.value); } break ; } break ; } } } } } function isNull(n){ if (n.length==0||n== "0" ){ return true ; } else { return false ; } } function dec_num(n){ if (n.indexOf( "." )==-1){ n=n+ "." ; } return n; } // function num_1_click(){ // var num=document.getElementById("num"); // var n=num.value; // // if(n==0){ // // n="1"; // // }else{ // // n=n+"1"; // // } // // num.value=n; // /*if(n==0){ // n=""; // } // n=n+"1"; // num.value=n;*/ // n=n+"1"; // num.value=n*1; // } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <!DOCTYPE html> < html > < head > < meta charset = "UTF-8" > < title >Document</ title > < link rel = "stylesheet" type = "text/css" href = "calc.css" > < script type = "text/javascript" src = "calc.js" ></ script > </ head > < body onload = "init()" > < div id = "div0" > < div id = "div1" > < input type = "text" name = "num" id = "num" > </ div > < div id = "div2" > < input type = "button" name = "btn" value = "C" > < input type = "button" name = "btn" value = "←" > < input type = "button" name = "btn" value = "+/-" > < input type = "button" name = "btn" value = "/" > < input type = "button" name = "btn" value = "1" > < input type = "button" name = "btn" value = "2" > < input type = "button" name = "btn" value = "3" > < input type = "button" name = "btn" value = "*" > < input type = "button" name = "btn" value = "4" > < input type = "button" name = "btn" value = "5" > < input type = "button" name = "btn" value = "6" > < input type = "button" name = "btn" value = "-" > < input type = "button" name = "btn" value = "7" > < input type = "button" name = "btn" value = "8" > < input type = "button" name = "btn" value = "9" > < input type = "button" name = "btn" value = "+" > < input type = "button" name = "btn" value = "0" > < input type = "button" name = "btn" value = "." > < input type = "button" name = "btn" value = "=" > < input type = "button" name = "btn" value = "m" > </ div > </ div > </ body > </ html > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | *{ margin : 0px ; padding : 0px ; } #div 0 { width : 300px ; position : relative ; top : 50px ; left : 400px ; } #num{ width : 282px ; height : 20px ; text-align : right ; background-color : white ; border : 0.5px solid grey; } input[type= "button" ]{ width : 60px ; height : 30px ; margin-right : 10px ; margin-top : 10px ; } |
7
收起
正在回答
1回答
同学你好。不是同学的代码问题,是js对浮点数计算的特性导致的。
JS中对于浮点数的计算都是不保证准确的,造成不准确的原因是二进制。 如果我们将0.2转换为二进制会发现: 0.2 => 0.0011 0011 0011 0011…(无限循环) 对于无限循环的小数,计算机会进行舍入处理。JavaScript 中的所有数字都存储为根为 10 的 64 位(8 比特),浮点数。进行双精度浮点数的小数部分最多支持 52 位,所以会进行截断,导致了不精确的结果。
本案例的目的是让同学学会js的基本用法呢,这个同学了解即可。
如果解答了同学的疑问,望采纳~
祝学习愉快~
2. 从网页搭建入门JavaWeb
- 参与学习 人
- 提交作业 676 份
- 解答问题 9666 个
本阶段将从前端网页搭建入手,到Java Web基础,前后端结合助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧