И снова калькулятор )))
Подскажите как сделать чтобы отображался не только результат, но и и сам процесс, т.е. ввод.
Так же интересует, как можно сделать, что обращаться только к одному блоку цифр? Код взял с сайта, и пытаюсь переделать по своему, поэтому есть много ошибок, если кто подскажет буду очень благодарен. А может и кто подскажет, как самому написать калькулятор в подобным простым стилем или с чего начать. Заранее Благодарен!
<form id="calculator">
<table>
<tr>
<td>
<div align="center">
<label for="result"></label>
<input type="text" id="result" name="result" size="16" readonly="readonly" class="display">
</div>
</td>
</tr>
<tr>
<td class="buttons">
<div id="num1" align="center">
<input type="button" onclick="addToInput1(this.value)" name="rakam11" value="1" />
<input onclick="addToInput1(this.value)" type="button" name="rakam22" value="2" />
<input onclick="addToInput1(this.value)" type="button" name="rakam33" value="3" />
<input onclick="addToInput1(this.value)" type="button" name="rakam44" value="4" />
<input onclick="addToInput1(this.value)" type="button" name="rakam55" value="5" />
<input onclick="addToInput1(this.value)" type="button" name="rakam66" value="6" />
<input onclick="addToInput1(this.value)" type="button" name="rakam77" value="7" />
<input onclick="addToInput1(this.value)" type="button" name="rakam88" value="8" />
<input onclick="addToInput1(this.value)" type="button" name="rakam99" value="9" />
<input onclick="addToInput1(this.value)" type="button" name="rakam00" value="0" />
</div>
<div id="act" align="center">
<input onclick="addToInput3(this.value)" type="button" name="plus" value="+" />
<input onclick="addToInput3(this.value)" type="button" name="minus" value="-" />
<input onclick="addToInput3(this.value)" type="button" name="umn" value="*" />
<input onclick="addToInput3(this.value)" type="button" name="delit" value="/" />
</div>
<div id="num2" align="center">
<input onclick="addToInput2(this.value)" type="button" name="rakam1" value="1" />
<input onclick="addToInput2(this.value)" type="button" name="rakam2" value="2" />
<input onclick="addToInput2(this.value)" type="button" name="rakam3" value="3" />
<input onclick="addToInput2(this.value)" type="button" name="rakam4" value="4" />
<input onclick="addToInput2(this.value)" type="button" name="rakam5" value="5" />
<input onclick="addToInput2(this.value)" type="button" name="rakam6" value="6" />
<input onclick="addToInput2(this.value)" type="button" name="rakam7" value="7" />
<input onclick="addToInput2(this.value)" type="button" name="rakam8" value="8" />
<input onclick="addToInput2(this.value)" type="button" name="rakam9" value="9" />
<input onclick="addToInput2(this.value)" type="button" name="rakam0" value="0" />
</div>
<tr>
<td colspan="2"><input type="button" name="button" id="button" onclick="kalk()" value="Считать" />
<input type="button" name="button1" onclick="clean()" value="CLEAN" /></td>
</tr>
</table>
</form>
function kalk(){
var n1=document.getElementById('num1').value;
var n2=document.getElementById('num2').value;
n1=parseFloat(n1);
n2=parseFloat(n2);
var a=document.getElementById('act').value;
var r=0;
if(a=='+') r=n1+n2;
if(a=='-') r=n1-n2;
if(a=='*') r=n1*n2;
if(a=='/'){
if(n2==0){
alert("на 0 делить нельзя");
document.getElementById("num2").value="";
document.getElementById("num2").focus();
}
else r=n1/n2;
}
document.getElementById("result").value=r;
}
function addToInput1(value) {
document.querySelector('#num1').value += value;
}
function addToInput3(value) {
document.querySelector('#act').value += value;
}
function addToInput2(value) {
document.querySelector('#num2').value += value;
}
function clean() {
document.querySelector('#num1').value = '';
document.querySelector('#num2').value = '';
document.querySelector('#act').value = '';
document.querySelector('#result').value = '';
}
|
hbsv,
Погуглите - и получите кучу информации по калькуляторам, например http://www.on-line-teaching.com/js/js.math.sample.htm |
hbsv,
Вот ваш калькулятор с выброшенным лишним и небольшими добавлениями
<!DOCTYPE html>
<html>
<head>
<title>Calc</title>
<script type="text/javascript">
var calcString = "";
function kalk() {
var res = eval(calcString);
document.getElementById("res").innerHTML = calcString + "=" + res;
}
function addToInput(value) {
calcString += value;
document.getElementById("res").innerHTML = calcString;
}
function clean() {
calcString = "";
document.getElementById("res").innerHTML = calcString;
}
</script>
</head>
<body>
<table>
<tr>
<td>
<div id="res" style="width:400px;height:20px;border:solid 1px black;">
</div>
</td>
</tr>
<tr>
<td class="buttons">
<div id="num1" align="center">
<input type="button" onclick="addToInput(this.value)" name="rakam11" value="1" />
<input onclick="addToInput(this.value)" type="button" name="rakam22" value="2" />
<input onclick="addToInput(this.value)" type="button" name="rakam33" value="3" />
<input onclick="addToInput(this.value)" type="button" name="rakam44" value="4" />
<input onclick="addToInput(this.value)" type="button" name="rakam55" value="5" />
<input onclick="addToInput(this.value)" type="button" name="rakam66" value="6" />
<input onclick="addToInput(this.value)" type="button" name="rakam77" value="7" />
<input onclick="addToInput(this.value)" type="button" name="rakam88" value="8" />
<input onclick="addToInput(this.value)" type="button" name="rakam99" value="9" />
<input onclick="addToInput(this.value)" type="button" name="rakam00" value="0" />
</div>
<div id="act" align="center">
<input onclick="addToInput(this.value)" type="button" name="plus" value="+" />
<input onclick="addToInput(this.value)" type="button" name="minus" value="-" />
<input onclick="addToInput(this.value)" type="button" name="umn" value="*" />
<input onclick="addToInput(this.value)" type="button" name="delit" value="/" />
</div>
<tr>
<td colspan="2"><input type="button" name="button" id="button" onclick="kalk()" value="Считать" />
<input type="button" name="button1" onclick="clean()" value="CLEAN" /></td>
</tr>
</table>
</body>
</html>
Можно еще добавить кнопки с точкой, скобками, DEL - удаление посимвольно с конца |
Цитата:
Но вопрос в том, что мне нужно написать без функции eval |
hbsv,
Цитата:
|
hbsv,
Нужно преобразование строки calcString в обратную польскую запись и затем вычисление - https://ru.wikipedia.org/wiki/%D0%9E...B8%D1%81%D1%8C К сожалению, сейчас нет времени, а то бы сделал |
Цитата:
|
Цитата:
|
А можно ли написать в таком стиле, что бы функция возвращала:
function add (a, b){
a + b;
return (a + b);
}
function subtract(a, b){
a - b;
return (a - b);
}
function multiply(a, b){
a * b;
return (a * b);
}
function divide(a, b){
a / b;
return (a / b);
}
|
+ Добавить
function calculate() {
B = getValue("");
switch(action) {
case "+":
C = A + B;
break;
case "-":
C = A - B;
break;
case "*":
C = A * B;
break;
case "/":
if (B == 0) {
alert("Нельзя делить на ноль!");
}
else {
C = A / B;
}
break;
}
document.getElementById("").value = C;
Чувствую, что должно получиться. Но пока не знаю как )) |
Цитата:
Заранее очень благодарен! |
Кто может помочь собрать калькулятор бесплатно на форуме или платно ($/час) в скайпе (hbsv-mtt):
<form name="taschenrechner" id="calculator">
<table>
<tr>
<td>
<input type="text" id="input" name="input" size="16" class="display">
</td>
</tr>
<tr>
<td class="buttons">
<input type="button" id="btn_1" value="1" OnClick="addInput(1)">
<input type="button" id="btn_2" value="2" OnClick="addInput(2)">
<input type="button" id="btn_3" value="3" OnClick="addInput(3)">
<input type="button" id="add" value="+" onclick="addOperator('+')">
<br>
<input type="button" id="btn_4" value="4" OnClick="addInput(4)">
<input type="button" id="btn_5" value="5" OnClick="addInput(5)">
<input type="button" id="btn_6" value="6" OnClick="addInput(6)">
<input type="button" id="sub" value="-" OnClick="addOperator('-')">
<br>
<input type="button" id="btn_7" value="7" OnClick="addInput(7)">
<input type="button" id="btn_8" value="8" OnClick="addInput(8)">
<input type="button" id="btn_9" value="9" OnClick="addInput(9)">
<input type="button" id="mult" value="x" OnClick="addOperator('*')">
<br>
<input type="button" id="clear" value="c" onClick="clear()">
<input type="button" id="btn_0" value="0" OnClick="addInput(0)">
<input type="button" id="calculate" value="=" OnClick="calc()">
<input type="button" id="div" value="/" OnClick="addOperator('/')">
</td>
</tr>
</table>
</form>
/**
* Created by hbsv on 31.01.2016.
*/
var a,b,c;
var action = '';
var input = document.getElementById('input');
function addInput(x) {
var res = document.getElementById(x).value - '';
if (!isNaN(res))
return res;
}
function PutNum(val) {
document.getElementById('input').value = (document.getElementById('input').value + val);
}
function add(a,b) {
action = '+';
a = addInput('input');
document.getElementById('input').value = (a + b);
return (a + b);
function sub(a,b) {
action = '-';
a = addInput('input');
document.getElementById('input').value = (a - b);
return (a + b);
}
function mult(a,b) {
action = '*';
a = addInput('input');
document.getElementById('input').value = (a * b);
return (a * b);
}
function div(a,b) {
action = '/';
a = addInput('input');
document.getElementById('input').value = (a / b);
return (a / b);
}
function clear() {
document.getElementById('input').value = '';
}
function calculate() {
b = addInput('input');
switch (action) {
case '+':
c = a + b;
break;
case '-':
c = a - b;
break;
case '*':
c = a * b;
break;
case '/':
c = a / b;
break
}
document.getElementById('input').value = c;
}
Очень нужна помощь, нужно собрать калькулятор при этом научиться самому его собирать )) Заранее Оч. Благодарен! |
Или еще лучше, с помощью методов
function Calculator() {
var methods = {
"+" : function(a,b) {
return a + b;
},
"-" : function(a,b) {
return a - b;
},
"*" : function(a,b) {
return a * b;
},
"/" : function(a,b) {
return a / b;
}
}
}
|
Вот вроде сделал
<!DOCTYPE html>
<html>
<head>
<title>Calc</title>
<script type="text/javascript">
var calcString = "";
function control(testString) {
testString = testString.replace(/\++/g, "+");
testString = testString.replace(/\--/g, "+");
testString = testString.replace(/\.\./g, ".");
testString = testString.replace(/[+-][-+]/g, "-");
return testString;
}
function calculation(buffString) {
buffString = buffString.replace(/([^[0-9.]{1})/g, " $1 ").trim(); // добавим пробелы вокруг не чисел
buffString = buffString.replace(/ {1,}/g, " "); // удаление сдвоенных пробелов
var buffArray = buffString.split(/\s/); // Элементы - в массив
var polishString = new Array;
var polishStack = new Array;
var stringId = -1;
var stackId = -1;
for (var i = 0; i < buffArray.length; i++) { // формируем обратную польскую запись
switch (buffArray[i]) {
case "(":
stackId++;
polishStack[stackId] = buffArray[i];
break;
case ")":
while (stackId >= 0 && polishStack[stackId] != "(") {
stringId++;
polishString[stringId] = polishStack[stackId];
stackId--;
}
stackId--;
break;
case "+":
while (stackId >= 0 && (polishStack[stackId] == "+" || polishStack[stackId] == "-" || polishStack[stackId] == "*" || polishStack[stackId] == "/")) {
stringId++;
polishString[stringId] = polishStack[stackId];
stackId--;
}
stackId++;
polishStack[stackId] = buffArray[i];
break;
case "-":
while (stackId >= 0 && (polishStack[stackId] == "+" || polishStack[stackId] == "-" || polishStack[stackId] == "*" || polishStack[stackId] == "/")) {
stringId++;
polishString[stringId] = polishStack[stackId];
stackId--;
}
stackId++;
polishStack[stackId] = buffArray[i];
break;
case "*":
while (stackId >= 0 && (polishStack[stackId] == "*" || polishStack[stackId] == "/")) {
stringId++;
polishString[stringId] = polishStack[stackId];
stackId--;
}
stackId++;
polishStack[stackId] = buffArray[i];
break;
case "/":
while (stackId >= 0 && (polishStack[stackId] == "*" || polishStack[stackId] == "/")) {
stringId++;
polishString[stringId] = polishStack[stackId];
stackId--;
}
stackId++;
polishStack[stackId] = buffArray[i];
break;
default:
stringId++;
polishString[stringId] = buffArray[i];
}
}
while (stackId >= 0) {
stringId++;
polishString[stringId] = polishStack[stackId];
stackId--;
} // польская запись готова
// alert(polishString);
stackId = -1; // Начинаем считать по польской записи
var stringIdMax = stringId;
for (stringId = 0; stringId <= stringIdMax; stringId++ ) {
switch (polishString[stringId]) {
case "+":
stackId--;
polishStack[stackId] = polishStack[stackId] + polishStack[stackId + 1];
break;
case "-":
stackId--;
polishStack[stackId] = polishStack[stackId] - polishStack[stackId + 1];
break;
case "*":
stackId--;
polishStack[stackId] = polishStack[stackId] * polishStack[stackId + 1];
break;
case "/":
stackId--;
polishStack[stackId] = polishStack[stackId] / polishStack[stackId + 1];
break;
default:
stackId++;
polishStack[stackId] = parseFloat(polishString[stringId]);
}
}
return polishStack[stackId];
}
function kalk() {
try {
var res = calculation(calcString);
} catch (e) { res = "Ошибка в выражении"; }
document.getElementById("res").innerHTML = calcString + "=" + res;
}
function addToInput(value) {
calcString += value;
calcString = control(calcString);
document.getElementById("res").innerHTML = calcString;
}
function clean() {
calcString = "";
document.getElementById("res").innerHTML = calcString;
}
function del() {
calcString = calcString.substr(0,calcString.length - 1);
document.getElementById("res").innerHTML = calcString;
}
</script>
</head>
<body>
<table>
<tr>
<td>
<div id="res" style="width:400px;min-height:20px;border:solid 1px black;">
</div>
</td>
</tr>
<tr>
<td class="buttons">
<div id="num1" align="center">
<input type="button" onclick="addToInput(this.value)" name="rakam11" value="1" />
<input onclick="addToInput(this.value)" type="button" name="rakam22" value="2" />
<input onclick="addToInput(this.value)" type="button" name="rakam33" value="3" />
<input onclick="addToInput(this.value)" type="button" name="rakam44" value="4" />
<input onclick="addToInput(this.value)" type="button" name="rakam55" value="5" />
<input onclick="addToInput(this.value)" type="button" name="rakam66" value="6" />
<input onclick="addToInput(this.value)" type="button" name="rakam77" value="7" />
<input onclick="addToInput(this.value)" type="button" name="rakam88" value="8" />
<input onclick="addToInput(this.value)" type="button" name="rakam99" value="9" />
<input onclick="addToInput(this.value)" type="button" name="rakam00" value="0" />
<input onclick="addToInput(this.value)" type="button" name="rakam00" value="." />
</div>
<div id="act" align="center">
<input onclick="addToInput(this.value)" type="button" name="plus" value="+" />
<input onclick="addToInput(this.value)" type="button" name="minus" value="-" />
<input onclick="addToInput(this.value)" type="button" name="umn" value="*" />
<input onclick="addToInput(this.value)" type="button" name="divide" value="/" />
<input onclick="addToInput(this.value)" type="button" name="lpar" value="(" />
<input onclick="addToInput(this.value)" type="button" name="rpar" value=")" />
</div>
</td>
<tr>
<td ><input type="button" name="button" id="button" onclick="kalk()" value="Считать" />
<input type="button" name="button1" onclick="clean()" value="CLEAN" />
<input type="button" name="button1" onclick="del()" value="DEL" /></td>
</tr>
</table>
</body>
</html>
Осталась масса простору для доработок |
Спасибо Огромнейшее!
|
Если есть возможность подскажите еще пару вопросов:
Имеется калькулятор:
<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" />
<input id="btn_2" type="button" value="2" />
<input id="btn_3" type="button" value="3" />
<input id="add" type="button" value="+" class="operator" />
</div>
<div align="center">
<input id="btn_4" type="button" value="4" />
<input id="btn_5" type="button" value="5" />
<input id="btn_6" type="button" value="6" />
<input id="sub" type="button" value=" - " class="operator" />
</div>
<input id="btn_7" type="button" value="7" />
<input id="btn_8" type="button" value="8" />
<input id="btn_9" type="button" value="9" />
<input id="mult" type="button" value=" * " class="operator" />
<div align="center">
<input id="clr" type="button" value=" c " class="clear" />
<input id="btn_0" type="button" value="0" />
<input id="calculate" type="button" value=" = " class="eval" />
<input id="div" type="button" value=" / " class="operator" />
</div>
</td>
</tr>
</table>
</from>
var a,b,c;
var action = '';
function getValue(id) {
var res = document.getElementById(id).value - '';
if (!isNaN(res))
return res;
}
function PutNum(val) {
document.getElementById("screen").value = (document.getElementById("screen").value + val)-0;
}
function add () {
a = getValue("screen");
document.getElementById("screen").value = 0;
action = "+";
}
function sub() {
a = getValue("screen");
document.getElementById("screen").value = 0;
action = "-";
}
function mult() {
a = getValue("screen");
document.getElementById("screen").value = 0;
action = "*";
}
function div() {
a = getValue("screen");
document.getElementById("screen").value = 0;
action = "/";
}
function clr() {
document.getElementById("screen").value = 0;
}
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;
}
window.onload = function () {
for (var i = 0; i < 10; i++) {
(function (val) {
document.getElementById("btn_" + val).onclick = function () {
PutNum(val);
}
})(i);
}
document.getElementById("add").addEventListener("click", add);
document.getElementById("calculate").addEventListener("click", calculate);
document.getElementById("sub").addEventListener("click", sub);
document.getElementById("mult").addEventListener("click", mult);
document.getElementById("div").addEventListener("click", div);
document.getElementById("clr").addEventListener("click", clr);
}
1 -й Вопрос что делает функция:
function PutNum(val) {
document.getElementById("screen").value = (document.getElementById("screen").value + val)-0;
Как я понимаю: велью а + атрибут велью б и минус 0. Можно ли как то проще написать или это вполне адекватно? )) В исполнении 0 получается промежуточное значение, т.е. оператор, как его заменить на само значение оператора, чтоб вместо ноля в калькуляторе отображался + - / *. Пробовал заменить, но минус считает криво. 2-й Вопрос, что делает эта функция, для чего используется цикл:
window.onload = function () {
for (var i = 0; i < 10; i++) {
(function (val) {
document.getElementById("btn_" + val).onclick = function () {
PutNum(val);
}
})(i);
}
document.getElementById("add").addEventListener("click", add);
document.getElementById("calculate").addEventListener("click", calculate);
document.getElementById("sub").addEventListener("click", sub);
document.getElementById("mult").addEventListener("click", mult);
document.getElementById("div").addEventListener("click", div);
document.getElementById("clr").addEventListener("click", clr);
}
3 - й Вопрос, можно ли этот код допиписать с использованием методов:
function Calculator() {
var methods = {
"+" : function(a,b) {
return a + b;
},
"-" : function(a,b) {
return a - b;
},
"*" : function(a,b) {
return a * b;
},
"/" : function(a,b) {
return a / b;
}
}
}
Заранее очень Благодарен! |
hbsv,
Цитата:
-0 дает то, что если это будет не цифра, то возникнет ошибка. Зачем - непонятно, т. к. эта функция привязана к клавишам ввода цифр. Без -0 все точно так же работает. Цитата:
Цитата:
Ну а как вам моя последняя версия? Есть вопросы, замечания? |
Цитата:
Цитата:
Цитата:
Я рассмотрел два варианта на jQuery и Вашу работу методом обратной польской записи, и для меня это пока, что рано. Сначала надо освоить основы чистого js) Еще раз большое спасибо, ваш пример, дал мне хорошее понимание в целом ) |
Калькулятор простой
hbsv,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.screen{
border: 1px solid #8B4513;
width: 120px;
display: inline-block;
border-radius: 2px;
text-align: right;
}
.calculator{
width: 120px;
text-align: center;
}
.calculator input{
width: 20%;
}
</style>
</head>
<body>
<form>
<table class="calculator">
<tr>
<td>
<span class="screen" >0</span>
</td>
</tr>
<tr>
<td>
<input class="button" type="button" value="1" />
<input class="button" type="button" value="2" />
<input class="button" type="button" value="3" />
<input class="button" type="button" value="+" />
</td>
</tr>
<tr>
<td>
<input class="button" type="button" value="4" />
<input class="button" type="button" value="5" />
<input class="button" type="button" value="6" />
<input class="button" type="button" value="-" />
</td>
</tr>
<tr>
<td>
<input class="button" type="button" value="7" />
<input class="button" type="button" value="8" />
<input class="button" type="button" value="9" />
<input class="button" type="button" value="*" />
</td>
</tr>
<tr>
<td>
<input class="button" type="button" value="c" />
<input class="button" type="button" value="0" />
<input class="button" type="button" value="=" />
<input class="button" type="button" value="/" />
</td>
</tr>
</table>
</form>
<script>
window.addEventListener("DOMContentLoaded", function() {
var calculator = document.querySelector(".calculator"),
screen = document.querySelector(".screen");
var methods = {
a: 0,
b: 0,
"+": function() {
return this.a += this.b
},
"-": function() {
return this.a -= this.b
},
"*": function() {
return this.a *= this.b
},
"/": function() {
return this.a /= this.b
},
out: function(a) {
screen.innerHTML = a
},
fix: function(a) {
return (this[a] * 100 | 0) / 100
},
cur: 0,
res: function(a) {
if (a == +a)
if (!this.cur) {
this.a = +(this.a + "" + a);
this.out(this.fix("a"))
}
else {
this.b = +(this.b + "" + a);
this.out(this.fix("a") + this.cur + this.fix("b"))
}
else if (a == "c")
{
this.b = this.a = this.cur = 0;
this.out(0)
}
else if (this.cur) {
if (!this.b && this.cur == "/") {
this.out("err");
return
}
!this.b && this.cur != "*" && (this.b = this.a);
this[this.cur]();
this.out(this.fix("a"));
this.b = 0;
this.cur = a == "=" ? 0 : a
}
else if (a != "=") {
this.out(this.fix("a") + a);
this.cur = a
}
}
};
calculator.addEventListener("click", function(event) {
var cls = event.target.classList;
if (cls && cls.contains("button")) {
val = event.target.value;
methods.res(val)
}
})
});
</script>
</body>
</html>
|
Огромнейшее Всем спасибо за Помощь!
Все вопросы решил, кроме одного. Вопрос с нулем остался. Может есть у кого какие идеи переписать или решить? |
Пока выходит так:
<!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, время: 03:10. |