用javascript写计算器遇到的问题,求大神

Carlchenccc 2016-09-18 08:07:14
下面是我写的JS,主要想实现的就是一个简单的计算器,能够进行除零和余零的判断,完成以后发现一些问题:
1.涉及到小数点的时候,只能输入例如0.9、0.78等数字,不能输入9.9、8.7等小数点之前有数的数字;
2.我想实现计算完成之后重新输入数字时,之前的结果被自动重置的效果,怎么实现?
3.怎么限制+、-等运算符连续输入?

<body>
<div id="main">
<label for="res"></label><input type="text" id="res" readonly/>
<div id="button1">
<button onclick="getNum(this)">1</button>
<button onclick="getNum(this)">2</button>
<button onclick="getNum(this)">3</button>
<button onclick="getNum(this)">+</button>
<button onclick="getNum(this)">4</button>
<button onclick="getNum(this)">5</button>
<button onclick="getNum(this)">6</button>
<button onclick="getNum(this)">-</button>
<button onclick="getNum(this)">7</button>
<button onclick="getNum(this)">8</button>
<button onclick="getNum(this)">9</button>
<button onclick="getNum(this)">*</button>
<button onclick="clearRes()">C</button>
<button onclick="getNum(this)">0</button>
<button onclick="getNum(this)">.</button>
<button onclick="getNum(this)">/</button>
<button onclick="getNum(this)">(</button>
<button onclick="getNum(this)">)</button>
<button onclick="getNum(this)">%</button>
<button onclick="getRes()">=</button>
</div>
</div>
</body>
<script>
var res = document.getElementById("res");
function getNum(obj){
res.value = res.value + obj.innerHTML;
//首位清零
if(!isNaN(res.value)){
res.value=eval(res.value);
}
}
//等于功能
function getRes(){
pdkh(res.value);
res.value = eval(res.value);
}
//清零功能
function clearRes(){
res.value="";
}
//判断括号
function pdkh(str) {
var a = str;
var b = str.lastIndexOf("\(");
//b最后一个左括号位置,加1防止第一个为位置0
if (b + 1) {
var c = a.slice(b);
var d = c.indexOf("\)");
var e = c.slice(0, d + 1); //e为括号及内部内容
// 判断除号
a = a.replace(e, pdch(e));
pdch(a);
b = a.lastIndexOf("\(");
} else {
pdch(a);
}
}
function pdch(khz) {
if (khz.match(/[\/%]/)) {
var wds = khz.match(/[\/%](\d+)+/);
if (wds[1] == 0) {
alert("除数或余数不能为零");
res.value = 0;
} else {
khz = khz.replace(wds[0], "");
pdch(khz);
}
} else {
return eval(khz);
}
}
</script>
...全文
422 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
chanel_1 2016-09-19
  • 打赏
  • 举报
回复
<div id="main"> <label for="res"></label><input type="text" id="res" readonly/> <div id="button1"> <button onclick="getNum(this)">1</button> <button onclick="getNum(this)">2</button> <button onclick="getNum(this)">3</button> <button onclick="getNum(this)">+</button> <button onclick="getNum(this)">4</button> <button onclick="getNum(this)">5</button> <button onclick="getNum(this)">6</button> <button onclick="getNum(this)">-</button> <button onclick="getNum(this)">7</button> <button onclick="getNum(this)">8</button> <button onclick="getNum(this)">9</button> <button onclick="getNum(this)">*</button> <button onclick="clearRes()">C</button> <button onclick="getNum(this)">0</button> <button onclick="getNum(this)">.</button> <button onclick="getNum(this)">/</button> <button onclick="getNum(this)">(</button> <button onclick="getNum(this)">)</button> <button onclick="getNum(this)">%</button> <button onclick="getRes()">=</button> </div> </div> </body> <script> var res = document.getElementById("res"); function getNum(obj){ //计算完成之后重新输入数字时,之前的结果被自动重置的效果 var num=res.getAttribute("data-num"); switch (num){ case "=": //清0 res.value="" break; case "+":case "-":case "*":case "%": //不准连续输入运算符 if(obj.innerHTML=="+"||obj.innerHTML=="-"||obj.innerHTML=="*"||obj.innerHTML=="%"){ return false; } break; deafult: res.value=res.value; } res.value = res.value + obj.innerHTML; res.setAttribute("data-num",obj.innerHTML); //首位清零 if(res.value[0]=="0"){ res.value=eval(res.value); } } //等于功能 function getRes(){ pdkh(res.value); res.value = eval(res.value); res.setAttribute("data-num","="); } //清零功能 function clearRes(){ res.value=""; } //判断括号 function pdkh(str) { var a = str; var b = str.lastIndexOf("\("); //b最后一个左括号位置,加1防止第一个为位置0 if (b + 1) { var c = a.slice(b); var d = c.indexOf("\)"); var e = c.slice(0, d + 1); //e为括号及内部内容 // 判断除号 a = a.replace(e, pdch(e)); pdch(a); b = a.lastIndexOf("\("); } else { pdch(a); } } function pdch(khz) { if (khz.match(/[\/%]/)) { var wds = khz.match(/[\/%](\d+)+/); if (wds[1] == 0) { alert("除数或余数不能为零"); res.value = 0; } else { khz = khz.replace(wds[0], ""); pdch(khz); } } else { return eval(khz); } } </script> 水平有限,不过效果可以达到
Carlchenccc 2016-09-18
  • 打赏
  • 举报
回复
自己顶一下ha

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧