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

Duvida se o código esta correto

Gostaria de saber se esta correta as sintaxes e o escopo que criei pro problema sobre calculo de IR, segue abaixo o código:

class Program { static void Main(string[] args) { double salario = 3300.0; double deduzir;

        if(salario < 1900.0)
        {
            Console.WriteLine("Não a IR para ser deduzido");
        }
        else
        {
            if (salario >= 1900.0 && salario <= 2800.0)
            {
                deduzir = 142.80;
                Console.WriteLine("A aliquota do IR é de 7,5% e o parcela que será deduzida do IRPF é de(R$): " +  deduzir);
            }

            if(salario >=2800.01 && salario <= 3751.0)
            {
                deduzir = 350;
                Console.WriteLine("A aliquota do IR é de 15%e a parcela que será deduzida do IRPF é de(R$): " +  deduzir);
            }

            if(salario >= 3751.01 && salario <= 4664.0)
            {
                deduzir = 636.0;
                Console.WriteLine("A aliquota do IR é de 15%e a parcela que será deduzida do IRPF é de(R$): " +  deduzir);
            }

        }

        Console.ReadLine();
    }
}
3 respostas
solução!

Olá Mayara, tecnicamente o seu código não produziria erros, mas pensando em boas práticas guardamos valores monetários no tipo decimal e não em double.

Talvez você tenha feito apenas para testes, mas os valores que você utilizou estão diferentes da tabela de IRPF atual Tabela aqui.

Pensando na lógica do código, deixo aqui uma outra forma mais compacta de escrever a mesma comparação:

decimal aliquota = 0m;
decimal deduzir = 0m;

if (salario > 4664.68m)
{
    aliquota = 27.5m;
    deduzir = 839.36m;
}
else if (salario >= 3751.06m)
{
    aliquota = 22.5m;
    deduzir = 636.13m;
}
else if (salario >= 2826.66m)
{
    aliquota = 15m;
    deduzir = 354.80m;
}
else if (salario >= 1903.99m)
{
    aliquota = 7.5m;
    deduzir = 42.80m;
}

if (aliquota == 0m)
{
    Console.WriteLine("Não há IR para ser deduzido");
}
else
{
    Console.WriteLine("A aliquota do IR é de " + aliquota + "% e a parcela que será deduzida do IRPF é de (R$): " + deduzir);
    //Dependendo da versão do C# que você está utilizando você também pode fazer:
    //Console.WriteLine($"A aliquota do IR é de {aliquota}% e a parcela que será deduzida do IRPF é de (R$): { deduzir}");
}

Qualquer dúvida é só perguntar!

Zambon.

Boa tarde Zambon, eu testei o código que você comentou, porém o visual Studio aponta erros com relação aos valores das variáveis que estão em decimais, ele trás a seguinte mensagem de erro.

Erro CS0664 Literal do tipo double não pode ser convertido implicitamente no tipo "decimal"; use um sufixo "M" para criar um literal desse tipo TestedeCalculoDeAliquota C:\Users\Asus\source\repos\AprendendoCSharp\TestedeCalculoDeAliquota\CodigoMelhorado.cs 19 Ativo

Olá Mayara!

Sim, me desculpe, está correto a sua observação. Para atribuir ou comparar números diretos no código (Hard Coded), nesse caso você deve utilizar o sufixo "m".

O sufixo especifica o tipo do número, eles servem para instruir ao compilador C# qual o formato literal do número, por exemplo 1000 pode ser considerado alguns tipos diferentes de número (inteiro, long, double).

Alguns exemplos de sufixos:

Tipo de variável:  float
Carácter:           F
Exemplo:            float x = 100F;

Tipo de variável:   double
Carácter:           D
Exemplo:            double x = 100D;

Tipo de variável:   decimal
Carácter:           M
Exemplo:            decimal x = 100M;

Tipo de variável:   long
Carácter:           L
Exemplo:            long x = 100L;

Não há distinção no sufixo de maiúscula ou minúscula, você pode utilizar das duas formas, porém há pessoas que preferem utilizar maiúsculo dada a similaridade do carácter "l" com o número "1".

Ajustei o código da resposta para refletir a alteração do sufixo.

Espero ter lhe ajudado.

Zambon