Ir para conteúdo
Fórum Script Brasil
  • 0

Notas e Moedas


Dorns

Pergunta

Olá pessoal, eu estou com uma dúvida nesse código.

Na hora de executar ele apresenta alguns valores certos e roda corretamente, por exemplo, se eu digito 91.01 ele imprime os valores corretamente. Porém se eu digitar 0.11 ou 0.06 ele mostra faltando 1 centavo.

Alguém pode me ajudar a encontrar o erro? Já fiz de tudo, inclusive já sei da possibilidade de separar o valor das notas e moedas em 2 inteiros e trabalhar apenas com valores inteiros, porém quero saber como faço para dar o resultado correto trabalhando com double mesmo. Eis o código:

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
    double valor, resto; 
    int qtd_100, qtd_50, qtd_20, qtd_10, qtd_5, qtd_2;
    int qtd_1, qtd_050, qtd_025, qtd_010, qtd_005, qtd_001;
    
    scanf("%lf", &valor);
    
    qtd_100 = valor / 100;
    resto = fmod(valor, 100); 
    
    qtd_50 = abs(resto / 50);
    resto = fmod(resto, 50);
    
    qtd_20 = abs(resto / 20);
    resto = fmod(resto, 20);
    
    qtd_10 = abs(resto / 10);
    resto = fmod(resto, 10);
    
    qtd_5 = abs(resto / 5);
    resto = fmod(resto, 5);
    
    qtd_2 = abs(resto / 2);
    resto = fmod(resto, 2);
    
    printf("NOTAS:\n");
    printf("%d nota(s) de R$ 100.00\n", qtd_100);
    printf("%d nota(s) de R$ 50.00\n", qtd_50);
    printf("%d nota(s) de R$ 20.00\n", qtd_20);
    printf("%d nota(s) de R$ 10.00\n", qtd_10);
    printf("%d nota(s) de R$ 5.00\n", qtd_5);
    printf("%d nota(s) de R$ 2.00\n", qtd_2);
    
    qtd_1 = abs(resto);
    resto = fmod(resto, 1);
    
    qtd_050 = abs(resto / 0.5);
    resto = fmod(resto, 0.5);
    
    qtd_025 = abs(resto / 0.25);
    resto = fmod(resto, 0.25);
    
    qtd_010 = abs(resto / 0.1);
    resto = fmod(resto, 0.1);
    
    qtd_005 = abs(resto / 0.05);
    resto = fmod(resto, 0.05);
    
    qtd_001 = abs(resto / 0.01);
    
    printf("MOEDAS:\n");
    printf("%d moeda(s) de 1.00\n", qtd_1);
    printf("%d moeda(s) de 0.50\n", qtd_050);
    printf("%d moeda(s) de 0.25\n", qtd_025);
    printf("%d moeda(s) de 0.10\n", qtd_010);
    printf("%d moeda(s) de 0.05\n", qtd_005);
    printf("%d moeda(s) de 0.01\n", qtd_001);

    return 0;
}
 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...