10
I created a simple calculator in Javascript, but some results are going wrong, for example, operations like '10+10' (returns 18) or '20/2' (returns 8).
I’m still learning to mess with the language, so it may be that the error is very simple, but I can’t see anything in the code that causes it.
var array = [];
// acionado ao clicar em números ou operadores
// inclui os todos numeros e operadores a um array
// exibe no paragrafo de id 'txt' o número ou operador que foi pressionado por ultimo
function funcao(param) {
var txt = document.getElementById('txt');
array.push(param);
txt.innerHTML = (param);
}
// acionado ao clicar na opção =
// passa todos os itens do array para uma variavel e depois usa 'eval()' para calcular a operação
// exibe o resultado no paragrafo de id 'txt'
function resultado() {
var result = 0;
for (var i = 0; i < array.length; i++) {
result += array[i];
}
result = eval(result);
txt.innerHTML = (result);
}
// acionado ao clicar na opção C
// remove todos os itens do array
// passa o valor da variavel result para zero
// volta a exibir apenas um espaço no paragrafo de id 'txt'
function limpar() {
for (var c = 1; c < array.length; c++) {
array = array.splice();
}
result = 0;
txt.innerHTML = " ";
}
#tela {
border: 1px solid #000;
width: 200px;
padding: 10px;
text-align: right;
margin-bottom: 5px;
}
button {
border: none;
margin: 2px;
padding: 10px;
width: 49px;
height: 50px;
}
<!-- dentro do paragrafo foi adicionado um espaço em branco por questões visuais (alt+255) -->
<div id='tela'>
<p id='txt'> </p>
</div>
<!-- cada botao chama a função funcao() com o seu valor, sendo números ou operadores -->
<button onclick="funcao('1')">1</button>
<button onclick="funcao('2')">2</button>
<button onclick="funcao('3')">3</button>
<button onclick="funcao('+')">+</button><br>
<button onclick="funcao('4')">4</button>
<button onclick="funcao('5')">5</button>
<button onclick="funcao('6')">6</button>
<button onclick="funcao('-')">-</button><br>
<button onclick="funcao('7')">7</button>
<button onclick="funcao('8')">8</button>
<button onclick="funcao('9')">9</button>
<button onclick="funcao('*')">*</button><br>
<!-- as funções limpar() e resultado() são para zerar a calculadora e mostrar o resultado, respectivamente-->
<button onclick="limpar()">c</button>
<button onclick="funcao('0')">0</button>
<button onclick="resultado()">=</button>
<button onclick="funcao('/')">/</button>
It only remained to explain that with the zero left the JS interprets as octal, which explains the results 18 and 8, since 010 is 8 in decimal, getting 8+10 and 020 is 16, getting 16/2.
– Woss
@Andersoncarloswoss Correct! Thank you for the comment.
– Isac