Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no programa

Eu estou fazendo um programa pra calcular o salário liquido, e quando entro os valores eles batem, mas quando coloco por exemplo 2000, 3000, 4000, 5000... o valor não bate exatamente com o do calculo do salário liquido, dá uma diferença não muito grande mas dá, nao fica exato. Alguém pode me ajudar?

import java.util.Scanner;

public class Exercicio1 {

    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);

        double salarioB, salarioL, INSS, IR;

        System.out.print("Informe seu salário bruto: ");
        salarioB = teclado.nextDouble();

        if (salarioB <= 1100)
            INSS = (0.075 * salarioB);
        else

        if (salarioB > 1100 && salarioB <= 2203.48)
            INSS = (0.09 * salarioB) - 16.50;
        else if (salarioB > 2203.48 && salarioB <= 3305.22)
            INSS = (0.12 * salarioB) - 82.60;
        else

        if ((salarioB > 3305.22 && salarioB <= 6433.57))
            INSS = (0.14 * salarioB) - 148.71;
        else
            INSS = 751.99;


        if (salarioB <= 1903.98)
            IR = 0;
        else

        if (salarioB > 1903.98 && salarioB <= 2826.65)
            IR = 0.075*(salarioB - INSS) - 142.80;
        else if (salarioB  <= 3751.05)
            IR = 0.15 * (salarioB - INSS) - 354.80;
        else

        if (salarioB <= 4664.68)
            IR = 0.225 * (salarioB - INSS) - 636.13;

        else
            IR = 0.275 * (salarioB - INSS) - 869.36;

        salarioL = (salarioB - INSS) - IR;


            System.out.printf("O salário liquido será de R$%4.2f", salarioL);

        teclado.close();
    }

}
1 resposta
solução!

Quando fazendo cálculo com dinheiro, é interessante usar o BigDecimal para não perder precisões com as casas decimais.