javascript – por que não consigo chama uma função pelo input type=”submit”?

Utilize o button=submit mesmo. Porém você não poderá chamar a função no botão, pois a função neste cenário é submeter o formulário. Logo intercepte a submissão do formulário com a propriedade “onsubmit”.

Exemplo:

<form onsubmit="calcular(event)">
  Enter name: <input type="text">
  <input type="submit">
</form>

Então capture o evento de submissão do form, e previna ele de submeter, e então ele devera apenas chamar a sua função.

function calcular(e) {
  e.preventDefault();
  /* Restante da sua função */
  return false;
}

O e.preventDefault(); previne que formulário seja submetido (atualização da página). Espero ter sido claro, fique à vontade para perguntar.