Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Math.round com 2 casas decimais

Eu queria utilizar Math.round, porém com 2 casas decimais. Por isso Eu pensei em multiplicar por 100 o valor a ser arredondado e depois dividir por 100.

O problema é que ao utilizar o método de calcular o IMC via variáveis. Ao subtrair o IMC com o round.math de um inteiro, o resultado não é o mesmo do que utilizando o calculo direto. dá uma diferneça de 0.000000000000001. Algém sabe me explicar o motivo?

Segue meu código abaixo:

<!--<meta charset="UTF-8" /> -->
<script>
   var pulaLinha = function () {
      document.write("<br>");
   };

   var sublinhar = function () {
      document.write("<hr>");
   };

   var mostra = function (frase) {
      document.write(frase);
      sublinhar();
      pulaLinha();
   };

   var CalculoIMC = function (peso, altura) {
      var imc = peso / (altura * altura);
      return Math.round(imc * 100) / 100;
   };

   var CalculoIMC_Obesidade = function (peso, altura) {
      var imcObesidade = 35 - (peso / (altura * altura));
      return Math.round(imcObesidade * 100) / 100;
   };

   var CalculoIMC_Magreza = function (peso, altura) {
      var imcMagreza = (peso / (altura * altura)) - 18;
      return Math.round(imcMagreza * 100) / 100;
   };

   var peso = prompt("Qual é o seu Peso?");
   var altura = prompt("Qual é a sua altura?");   

   mostra("Peso: " + peso + "<br>" + "Altura: " + altura); // 78 ... 1.75


   // Forma 1:
   mostra("Meu IMC é: " + CalculoIMC(peso, altura)); // 25.47
   mostra("Estou distante da Obesidade: " + CalculoIMC_Obesidade(peso, altura)); // 9.53
   mostra("Estou distante da Magreza: " + CalculoIMC_Magreza(peso, altura)); // 7.47


   // Forma 2:
   var MeuIMC = CalculoIMC(peso, altura);
   var DiffObesidade = 35 - MeuIMC;
   var DiffMagreza = MeuIMC - 18;

   mostra("Meu IMC é: " + MeuIMC); // 25.47
   mostra("Estou distante da Obesidade: " + DiffObesidade); // 9.530000000000001
   mostra("Estou distante da Magreza: " + DiffMagreza); // 7.469999999999999



</script>
2 respostas
solução!

Oi Gustavo

Essa é uma pergunta realmente bem interessante e tem a ver com a representação utilizada pela linguagem de programação para o número real. Como a memória que é utilizada por uma variável é limitada (geralmente 1, 2, 4 ou 8 bytes por variável) e a quantidade de números que existem é infinita, o computador precisa fazer arredondamentos em todas as contas que utilizam números reais (também conhecidos como ponto flutuante) e por isso, mesmo que duas expressões sejam matematicamente equivalentes, no computador, por causa do arredondamento, as contas podem terminar com resultados diferentes.

Obrigado Victor!!!