Problema no codigo pra informar quantas moedas nescessaria para troco

1 resposta
D

Esse processo deve receber um valor de troco e calcular quantas moedas de cada valor são necessárias para o troco. Por exemplo, se o troco for de R$ 0,85, serão necessárias uma moeda de 0,50, uma de 0,25 e uma de 0,10.
Ele deve receber um valor e imprimir a quantidade de cada moeda.

/**
 * @(#)troco.java
 *
 *
 * @author 
 * @version 1.00 2009/3/31
 */

public class troco {
        
    /**
     * Creates a new instance of <code>troco</code>.
     */
    public troco() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
      double troco = 0.0;
      int t100, t050, t025, t010, t005, t001;

      t100=0;
      t050=0;
      t025=0;
      t010=0;
      t005=0;
      t001=0;
      
      troco=9.6;

      while (troco > 0)
      {
        if (troco >= 1)
        {
          troco=troco-1;
          t100++;
        } else if (troco >= 0.50)
        {
          troco=troco-0.50;
          t050++;
        } else if (troco >= 0.25)
        {
          troco=troco-0.25;
          t025++;
        } else if (troco >= 0.10)
        {
          troco=troco-0.10;
          t010++;
        } else if (troco >= 0.05)
        {
          troco=troco-0.05;
          t005++;
        } else if (troco >= 0.01)
        {
          troco=troco-0.01;
          t001++;
        }
      }

      if (t100 > 0)
        System.out.printf(t100 + " Moeda(s) de um Real\n");
      if (t050 > 0)
        System.out.printf(t050 + " Moeda(s) de Cinquenta Centavos\n");
      if (t025 > 0)
        System.out.printf(t025 + " Moeda(s) de Vinte e Cinco Centavos\n");
      if (t010 > 0)
        System.out.printf(t010 + " Moeda(s) de Dez Centavos\n");
      if (t005 > 0)
        System.out.printf(t005 + " Moeda(s) de Cinco Centavos\n");
      if (t001 > 0)
        System.out.printf(t001 + " Moeda(s) de Um Centavo\n");

    }
}

Quando tem valores que o troco precisa de moedas de 0,10 - 0,05 - 0,01 ele fica em loop eterno é como se perdesse a precisão na hora de diminui o valor do troco… já tentei mudar pra double mas simplesmente acontece nada

1 Resposta

T

Você está tendo problemas com aritmética de ponto-flutuante. De fato, você vai entrar em loop rodando esse código.
Dica: tente re-escrever o código acima usando centavos e o tipo de dados “long”, em vez de double ou float.

Por exemplo, em vez de calcular com 0.85, use o valor 85. Depois, para mostrar o resultado, multiplique por 0.01 nos lugares adequados.

Criado 31 de março de 2009
Ultima resposta 31 de mar. de 2009
Respostas 1
Participantes 2