Não consigo descobrir porque a variavel totalDescontos está calculando errado me ajudem

Estou fazendo um exercicio do curso da Loiane e esbarrei com um problema que eu não consegui entender. O exercicio é pra calcular a folha de pagamento mas a variável totalDescontos está calculando um valor que eu não entendo o porque. Fiz um teste mostrando cada valor calculado e não faz sentido.

O valor da hora eu coloquei 5 e a quantidade de horas eu coloquei 220. Se alguém puder me ajudar agradeço. Segue o código:

import java.util.Scanner;

public class ex12 {

public static void main(String[] args) {
	// calcular salario 2
	
	Scanner scan = new Scanner(System.in);
	System.out.println("Informe o valor da sua hora de trabalho: ");
	double valorHora = scan.nextDouble();
	System.out.println("Informe quantas horas voce trabalhou no mes: ");
	double qtdHora = scan.nextDouble();
	
	double bruto = valorHora * qtdHora;	
	
	int fgts = 11;
	double valorFgts = (bruto / 100) * fgts;
	
	int inss = 10;
	double valorInss = (bruto / 100) * inss;
	
	int sindicato = 3;
	double valorSindicato = (bruto / 100) * sindicato;
	
	int ir = 0;
	double valorDoIr = 0;		
	
	if ((bruto >= 900) || (bruto <= 1500)) {
		ir = 5;
		valorDoIr = (bruto / 100) * ir;
	}
	
	else if ((bruto > 1500) || (bruto <= 2500)) {
		ir = 10;
		valorDoIr = (bruto / 100) * ir;
	}
	
	else if (bruto > 2500) {
		ir = 20;
		valorDoIr = (bruto / 100 ) * ir;
	}
	
	double totalDescontos = bruto - valorDoIr - valorInss - valorSindicato;
	
	double salarioLiquido = bruto - totalDescontos;
	
	
	
	System.out.println("Salario Bruto: (" + valorHora + " * " + qtdHora + ")" + "    : " + "R$ " + bruto);				
	System.out.println("(-)  IR (" + ir + "%)             : R$ " + valorDoIr);
	System.out.println("(-)  INSS (" + inss + "%)         : R$ " + valorInss);
	System.out.println("(-)  Sindicato (" + sindicato + "%)         : R$ " + valorSindicato);
	System.out.println("FGTS (" + fgts + "%)         : R$ " + valorFgts);
	System.out.println("Total de descontos          : R$ " + totalDescontos);
	System.out.println("Salario Liquido          : R$ " + salarioLiquido);
	

}

}

Verdade… eu vi agora… kkk erro de logica…

O total de descontos deve ser a soma dos impostos, mas você já está subtraindo tudo do bruto. Deveria ser assim:

double totalDescontos = valorDoIr + valorInss + valorSindicato;
double salarioLiquido = bruto - totalDescontos;
1 curtida

verdade… bobeira minha

Explica o teu erro. Pode ajudar mais pessoas. E não tenha vergonha de perguntar por mais simples que seja desde que tenha quebrado a cabeça um pouco e explicando o que fez pra tentar resolver e não conseguiu obter sucesso na resolução.

1 curtida

Foi um erro de logica onde eu ao criar a variavel para calcular o total de descontos da folha de pagamento instintivamente nao me atentei para o fato de que somente os descontos deveriam ser considerados e somados, ao inves disso eu fiz um outro calculo. Na hora nao fez sentido pra mim, mas agora lendo com calma o proprio codigo percebi o erro. Como a gente se desespera as vezes kkkk

1 curtida

Outro detalhe, a formatação pode ser feita com printf e NumberFormat:

NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
System.out.printf("Salario Bruto: (%.2f * %.2f)    : %s\n", valorHora, qtdHora, formatter.format(bruto));
System.out.printf("(-)  IR (%d%%)           : %s\n", ir, formatter.format(valorDoIr));
System.out.printf("(-)  INSS (%d%%)         : %s\n", inss, formatter.format(valorInss));
System.out.printf("(-)  Sindicato (%d%%)    : %s\n", sindicato, formatter.format(valorSindicato));
System.out.printf("FGTS (%d%%)              : %s\n", fgts, formatter.format(valorFgts));
System.out.printf("Total de descontos       : %s\n", formatter.format(totalDescontos));
System.out.printf("Salario Liquido          : %s\n", formatter.format(salarioLiquido));

E o cálculo do IR pode ser assim:

if (bruto > 2500) {
    ir = 20;
} else if (bruto > 1500) {
    ir = 10;
} else if (bruto >= 900) {
    ir = 5;
}
if (ir > 0) {
    valorDoIr = (bruto / 100) * ir;
}

Se não entrar no primeiro if é porque com certeza não é maior que 2500, então não precisa testar isso de novo. Basta testar se é maior que 1500.

Se não entrou no if nem no primeiro else, é porque com certeza não é maior que 1500, então no último else if só precisa testar se é maior ou igual a 900.

E o cálculo pode ser feito apenas uma vez, já que ele é o mesmo para todos os casos.