Пока выходит так:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Calculator</title> </head> <link rel="stylesheet" type="text/css" href="main.css"> <body> <from id="calculator"> <table> <tr> <td> <div align="center"> <input id="screen" type="text" value="" size="16" class="display" readonly="readonly" /> </div> </td> </tr> <tr> <td class="buttons"> <div align="center"> <input id="btn_1" type="button" value="1" onclick="addInput(1)"/> <input id="btn_2" type="button" value="2" onclick="addInput(2)"/> <input id="btn_3" type="button" value="3" onclick="addInput(3)" /> <input id="add" type="button" value="+" class="operator" onclick="add()" /> </div> <div align="center"> <input id="btn_4" type="button" value="4" onclick="addInput(4)" /> <input id="btn_5" type="button" value="5" onclick="addInput(5)" /> <input id="btn_6" type="button" value="6" onclick="addInput(6)" /> <input id="sub" type="button" value=" - " onclick="sub()" class="operator" /> </div> <input id="btn_7" type="button" value="7" onclick="addInput(7)" /> <input id="btn_8" type="button" value="8" onclick="addInput(8)" /> <input id="btn_9" type="button" value="9" onclick="addInput(9)" /> <input id="mult" type="button" value=" * " onclick="mult()" class="operator" /> <div align="center"> <input id="clr" type="button" value=" c " onclick="clr()" class="clear" /> <input id="btn_0" type="button" value="0" onclick="addInput(0)" /> <input id="calculate" type="button" value=" = " onclick="calculate()" class="eval" /> <input id="div" type="button" value=" / " onclick="div()" class="operator" /> </div> </td> </tr> </table> </from> </body> <script type="text/javascript" language="javascript" src="main.js"></script> </html> и js "use strict"; var a,b,c; var action = ""; function getValue(value) { var res = document.getElementById(value).value - ''; if (!isNaN(res)) return res; } function addInput(val) { document.getElementById("screen").value = (document.getElementById("screen").value + val)-""; } function add () { a = getValue("screen"); document.getElementById("screen").value = ""; action = "+"; } function sub() { a = getValue("screen"); document.getElementById("screen").value = ""; action = "-"; } function mult() { a = getValue("screen"); document.getElementById("screen").value = ""; action = "*"; } function div() { a = getValue("screen"); document.getElementById("screen").value = ""; action = "/"; } function clr() { document.getElementById("screen").value = ""; } function calculate() { b = getValue("screen"); switch(action) { case "+": c = a + b; break; case "-": c = a - b; break; case "*": c = a * b; break; case "/": if (b == 0) { alert('Division durch Null kann nicht sein!'); } else { c = a / b; } break; } document.getElementById("screen").value = c; } |
hbsv,
Почему вы не делаете работающих примеров? Например, такой: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Calculator</title> <script type="text/javascript"> "use strict"; var a, b, c; var action = ""; function getValue(value) { var res = parseInt(document.getElementById(value).value); if (res == res) return res; } function addInput(val) { document.getElementById("screen").value = (document.getElementById("screen").value + val); } function add() { a = getValue("screen"); document.getElementById("screen").value = ""; action = "+"; } function sub() { a = getValue("screen"); document.getElementById("screen").value = ""; action = "-"; } function mult() { a = getValue("screen"); document.getElementById("screen").value = ""; action = "*"; } function div() { a = getValue("screen"); document.getElementById("screen").value = ""; action = "/"; } function clr() { document.getElementById("screen").value = ""; } function calculate() { b = getValue("screen"); switch (action) { case "+": c = a + b; break; case "-": c = a - b; break; case "*": c = a * b; break; case "/": if (b == 0) { alert('Division durch Null kann nicht sein!'); } else { c = a / b; } break; } document.getElementById("screen").value = c; } </script> </head> <body> <table> <tr> <td> <div align="center"> <input id="screen" type="text" value="" size="16" class="display" readonly="readonly" /> </div> </td> </tr> <tr> <td class="buttons"> <div align="center"> <input id="btn_1" type="button" value="1" onclick="addInput(this.value)" /> <input id="btn_2" type="button" value="2" onclick="addInput(2)" /> <input id="btn_3" type="button" value="3" onclick="addInput(3)" /> <input id="add" type="button" value="+" class="operator" onclick="add()" /> </div> <div align="center"> <input id="btn_4" type="button" value="4" onclick="addInput(4)" /> <input id="btn_5" type="button" value="5" onclick="addInput(5)" /> <input id="btn_6" type="button" value="6" onclick="addInput(6)" /> <input id="sub" type="button" value=" - " onclick="sub()" class="operator" /> </div> <input id="btn_7" type="button" value="7" onclick="addInput(7)" /> <input id="btn_8" type="button" value="8" onclick="addInput(8)" /> <input id="btn_9" type="button" value="9" onclick="addInput(9)" /> <input id="mult" type="button" value=" * " onclick="mult()" class="operator" /> <div align="center"> <input id="clr" type="button" value=" c " onclick="clr()" class="clear" /> <input id="btn_0" type="button" value="0" onclick="addInput(0)" /> <input id="calculate" type="button" value=" = " onclick="calculate()" class="eval" /> <input id="div" type="button" value=" / " onclick="div()" class="operator" /> </div> </td> </tr> </table> </body> </html> Как говорится, найди семь отличий (хотя, может, и не семь) |
Сорри не знал как сделать работающий код))
Как работает эта функция, в чем ее смысл? function getValue(value){ var res = parseInt(document.getElementById(value).value); if (res == res) return res; По поводу нуля и минуса, я вот что имел ввиду, сейчас вставлю работающий код, сделайте любое вычитание и Вы меня поймете)) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Calculator</title> </head> <link rel="stylesheet" type="text/css" href="main.css"> <body> <from id="calculator"> <table> <tr> <td> <div align="center"> <input id="screen" type="text" value="" size="16" class="display" readonly="readonly" /> </div> </td> </tr> <tr> <td class="buttons"> <div align="center"> <input type="button" value="1" onclick="addInput(1)"/> <input type="button" value="2" onclick="addInput(2)"/> <input type="button" value="3" onclick="addInput(3)" /> <input type="button" value="+" class="operator" onclick="add()" /> </div> <div align="center"> <input type="button" value="4" onclick="addInput(4)" /> <input type="button" value="5" onclick="addInput(5)" /> <input type="button" value="6" onclick="addInput(6)" /> <input type="button" value=" - " onclick="sub()" class="operator" /> </div> <input type="button" value="7" onclick="addInput(7)" /> <input type="button" value="8" onclick="addInput(8)" /> <input type="button" value="9" onclick="addInput(9)" /> <input type="button" value=" * " onclick="mult()" class="operator" /> <div align="center"> <input type="button" value=" c " onclick="clr()" class="clear" /> <input type="button" value="0" onclick="addInput(0)" /> <input type="button" value=" = " onclick="calculate()" class="eval" /> <input type="button" value=" / " onclick="div()" class="operator" /> </div> </td> </tr> </table> </from> </body> <script> "use strict"; var a,b,c; var operator; function getValue(value){ var res = parseInt(document.getElementById(value).value); if (res == res) return res; } //function getValue(value) { // var res = document.getElementById(value).value - ""; // if (!isNaN(res)) // return res; //} function addInput(val) { document.getElementById("screen").value = document.getElementById("screen").value + val; } function add () { a = getValue("screen"); document.getElementById("screen").value = "+"; operator = "+"; } function sub() { a = getValue("screen"); document.getElementById("screen").value = "-"; operator = "-"; } function mult() { a = getValue("screen"); document.getElementById("screen").value = "*"; operator = "*"; } function div() { a = getValue("screen"); document.getElementById("screen").value = "/"; operator = "/"; } function clr() { document.getElementById("screen").value = ""; } function calculate() { b = getValue("screen"); switch(operator) { case "+": c = a + b; break; case "-": c = a - b; break; case "*": c = a * b; break; case "/": if (b == 0) { alert('Division durch Null kann nicht sein!'); } else { c = a / b; } break; } document.getElementById("screen").value = c; } </script> </html> Я хочу, чтобы в промежуточном значении, отображался оператор, если я так делаю как в примере выше, то получается косяк с минусом. Можно ли как то этот минус на минус исправить? или уже ничего не поделаешь? |
Вот на работающем примере сразу стали понятны ваши проблемы.
Нельзя смешивать в одном input значения и операции, т.к. в результате происходит задвоение операторов. Их, конечно, легко отфильтровать при вводе данных из input, но возникает другая проблема: минус может быть как оператором, так и частью значения, например, как результат вычисления 1-2=-1. Поэтому операторы лучше показывать в другом input. При этом бонус - появляется возможность вести полный протокол <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Calculator</title> </head> <body> <table> <tr> <td> <input id="action" type="text" value="" size="16" class="display" readonly="readonly" /> </td> <td> <input id="screen" type="text" value="" size="16" class="display" readonly="readonly" /> </td> </tr> </table> <table> <tr> <td><input type="button" value="1" onclick="addInput(1)"/></td> <td><input type="button" value="2" onclick="addInput(2)"/></td> <td><input type="button" value="3" onclick="addInput(3)" /></td> <td><input type="button" value="+" class="operator" onclick="add()" /></td> </tr> <tr> <td><input type="button" value="4" onclick="addInput(4)" /></td> <td><input type="button" value="5" onclick="addInput(5)" /></td> <td><input type="button" value="6" onclick="addInput(6)" /></td> <td><input type="button" value=" - " onclick="sub()" class="operator" /></td> </tr> <tr> <td><input type="button" value="7" onclick="addInput(7)" /></td> <td><input type="button" value="8" onclick="addInput(8)" /></td> <td><input type="button" value="9" onclick="addInput(9)" /></td> <td><input type="button" value=" * " onclick="mult()" class="operator" /></td> </tr> <tr> <td><input type="button" value=" c " onclick="clr()" class="clear" /></td> <td><input type="button" value="0" onclick="addInput(0)" /></td> <td><input type="button" value=" = " onclick="calculate()" class="eval" /></td> <td><input type="button" value=" / " onclick="div()" class="operator" /></td></td> </tr> </table> </body> <script> "use strict"; var a, b, c; var operator; function getValue(value) { var res = parseInt(document.getElementById(value).value); if (res == res) return res; } function addInput(val) { document.getElementById("screen").value = document.getElementById("screen").value + val; document.getElementById("action").value = document.getElementById("action").value + val; } function add() { a = getValue("screen"); document.getElementById("action").value = document.getElementById("action").value + "+"; document.getElementById("screen").value = ""; operator = "+"; } function sub() { a = getValue("screen"); document.getElementById("action").value = document.getElementById("action").value + "-"; document.getElementById("screen").value = ""; operator = "-"; } function mult() { a = getValue("screen"); document.getElementById("action").value = document.getElementById("action").value + "*"; document.getElementById("screen").value = ""; operator = "*"; } function div() { a = getValue("screen"); document.getElementById("action").value = document.getElementById("action").value + "/"; document.getElementById("screen").value = ""; operator = "/"; } function clr() { document.getElementById("action").value = ""; document.getElementById("screen").value = ""; } function calculate() { b = getValue("screen"); switch (operator) { case "+": c = a + b; break; case "-": c = a - b; break; case "*": c = a * b; break; case "/": if (b == 0) { alert('Division durch Null kann nicht sein!'); } else { c = a / b; } break; } document.getElementById("screen").value = c; document.getElementById("action").value = document.getElementById("action").value + "=" + c; } </script> </html> |
Я понял, спасибо большое. Либо так либо так)
А в чем же суть, этой функции? Чем она отличается от логики !isNan? function getValue(value){ var res = parseInt(document.getElementById(value).value); if (res == res) return res; } |
Функция isNaN не всегда дает правильный результат. Если интересно - погуглите. Зато NaN не равно NaN всегда
|
А так считать?
А так считать не пробовали?
34+5/3*6= ???? Добавьте правила и логику. Будет идеально. Сперва умножение, деление, потом уже сложение. Не? |
feniks81,
Прочитайте всю тему, особенно про польскую запись. Попробуйте ваш пример там. И потом, это идеи, наброски, а не завершенная работа |
Цитата:
|
Часовой пояс GMT +3, время: 19:14. |