BigDecimal usando If e Else

Estou tendo dificuldades para inserir o if e else, .
O código é o seguinte se valorCompra receber algum valor ele vai entrar no if do valor compra, se ele não receber nenhum valor, ele vai retornar nulo ou zero e a mesma coisa o valorVenda, se receber algum valor ele vai entrar no if do valor Venda, se ele não receber nenhum valor, ele vai retornar nulo.

No primeiro if que é o de compra ele esta me retornando o valor correto, mais no if de venda ele não esta retornado nenhum valor, alguém pode me ajudar?

BigDecimal b4 = null;
BigDecimal b10 = null;
BigDecimal b8 = null;
public BigDecimal soma(Double valorCompra, Double valorVenda) {
if (valorCompra == 0) {
BigDecimal b1 = soma0.add(soma1);
BigDecimal b2 = b1.add(soma2);
BigDecimal b3 = b2.add(BigDecimal.valueOf(valorCompra));
b4 = b3.add(BigDecimal.valueOf(correta));
return b4;
} else {
if (valorVenda == 0) {
BigDecimal b5 = soma0.add(soma1);
BigDecimal b6 = b5.add(soma2);
BigDecimal b7 = b6.add(BigDecimal.valueOf(correta));
b8 = BigDecimal.valueOf(valorVenda).subtract(b7);
return b8;
}
}
return b10;
}

Alguém pode me ajudar?

tenta debugar o codigo na sua IDE.

possivelmente o erro esta no metodo subtract
MathContext mc = new MathContext(2); //dependendo do contexto
tente assim, b8 = b7.subtract(b6, mc);

@robin_show não entendi muito bem o pq e como usar o MathContext, no meu caso o MathContext é melhor que Bigdecimal? e com o MathContext eu consigo fazer o if e else e com o Bigdecimal não tem como fazer, seria isso? pois a minha duvida é o porque o if e else não esta funcionando…

O problema é que você colocou para ele calcular o valorVenda somente caso o valorCompra seja diferente de 0.

Teste o código abaixo:

BigDecimal b4 = null;
BigDecimal b10 = null;
BigDecimal b8 = null;
public BigDecimal soma(Double valorCompra, Double valorVenda) {
	if (valorCompra == 0) {
		BigDecimal b1 = soma0.add(soma1);
		BigDecimal b2 = b1.add(soma2);
		BigDecimal b3 = b2.add(BigDecimal.valueOf(valorCompra));
		b4 = b3.add(BigDecimal.valueOf(correta));
		return b4;
	} else {
		return BigDecimal.ZERO;
	}

	if (valorVenda == 0) {
		BigDecimal b5 = soma0.add(soma1);
		BigDecimal b6 = b5.add(soma2);
		BigDecimal b7 = b6.add(BigDecimal.valueOf(correta));
		b8 = BigDecimal.valueOf(valorVenda).subtract(b7);
		return b8;
	}

return b10;
}

POR FAVOR, melhore a nomeação de suas variáveis, está muito ruim assim. Não da pra saber o que seria b1, b2, b3…
Se as mesmas não tem algum significado (são apenas auxiliares), quer dizer que dá para melhorar o código e deixar mais legível.

@Rodrigomarden ele esta dando esse erro, pedindo para eu apagar o segundo if…

É, realmente ele nunca vai chegar a testar o if do valorVenda desta maneira.

Pode tentar explicar o que você precisa? Se for um exercício ou uma solicitação postar na integra.

@Rodrigomarden

Eu preciso que quando a variável valorCompra receber um valor ele execute o código do valor compra, a mesma coisa o valorVenda, se receber algum valor preciso que ele execute o código que esta no if do valor Venda, se ele receber valor de venda e compra que ele execute os dois códigos…

Certo, então você tem que começar alterando o seu método, ele deve retornar 2 (venda e compra) valores e não somente 1.

Existem duas formas, retornar um Array de BigDecimal e retornar os dois neste objeto ou criar um método para cada, sendo um para o valorCompra e um para o valorVenda. (sendo a segunda forma mais rápida)

Outra pergunta, o que seria o b10?

@Rodrigomarden eu pensei tb em fazer um método para cada e depois somar os 2, mais dentro de um método eu achava que com o if e else seria de boa…o b10 faz nada rsrs…quando copiei o código estava tentando outra coisa,…

@Rodrigomarden retornar um Array de BigDecimal poderia me dar um exemplo de como ficaria?

Ainda não entendi muito bem o que deseja fazer, mas acredito que vá ser isso ai.

BigDecimal b4 = null;
BigDecimal b10 = null;
BigDecimal b8 = null;
public BigDecimal soma(Double valorCompra, Double valorVenda) {
	if (valorCompra == 0) {
		BigDecimal b1 = soma0.add(soma1);
		BigDecimal b2 = b1.add(soma2);
		BigDecimal b3 = b2.add(BigDecimal.valueOf(valorCompra));
		b4 = b3.add(BigDecimal.valueOf(correta));
		
	} else {
		b4 = BigDecimal.ZERO;
	}

	if (valorVenda == 0) {
		BigDecimal b5 = soma0.add(soma1);
		BigDecimal b6 = b5.add(soma2);
		BigDecimal b7 = b6.add(BigDecimal.valueOf(correta));
		b8 = BigDecimal.valueOf(valorVenda).subtract(b7);
		
	} else {
		b8 = BigDecimal.ZERO;
	}

return b4.add(b8);
}

O que seria soma1, soma2, correta?

1 curtida

@Rodrigomarden soma1, soma2 e correta é o resultado de outro método…mais continua não dando certo…

Pode me descrever um exemplo prático do que precisa então?

Se o valorCompra for 10, qual será o valor de b1, b2, b3 e b4?
Se o valorVenda for 20, qual será o valor de b5, b6, b7 e b8?

E qual o valorFinal que deve ser retornado nesse caso??

@Rodrigomarden com esse código esta acontecendo o seguinte…ele esta me retornando como resultado o valor que veio das variáveis venda e compra, ou seja os códigos não estão sendo calculados, só esta imprimindo o valor que entrou entendeu, pq será?

@Rodrigomarden o b1 esta recebendo a soma do valor soma0 com o valor da soma1,
o b2 esta recebendo a soma do b1 com o valor da soma2
o b3 esta recebendo o valor da soma do b2 com o valor da variavel valor compra…

exemplo se o valorcompra for 572 o valor final vai ser 583,23, se o valorvenda for 572 o valor final vai ser outro…entendeu?

Repito a pergunta, pode me descrever um exemplo prático do que precisa então?

Se o valorCompra for 10, qual será o valor de b1, b2, b3 e b4?
Se o valorVenda for 20, qual será o valor de b5, b6, b7 e b8?

E qual o valorFinal que deve ser retornado nesse caso??

Deve ser algum problema nas outras variáveis (soma0, soma1 e soma2) que devem estar zeradas.

Faça uma depuração do seu código e verifique o valor de cada variável no momento de execução.

@Rodrigomarden segue a foto com os metódos da soma0, soma1 e soma2…elas não estão zeradas, estão calculando certinho testei aqui…

vou te dar um exemplo de outros números pois estou lendo valores de um pdf, se o valor de compra for 572,00, o b1 vai ter valor de 1,21, o b2 vai ter 1,23, o b3 vai ter 573,23 e o b4 vai ter 583,23…e dai por diante…o problema que ele não esta fazendo esses calculos com o seu código, só esta retornando o valor de entrada.