Pessoal, se tiver algum Delpheiro que possa me ajudar a transformar em java, segue a funcao em Delphi
if (Arredondamento = ARR_NOVE) then // Final 9.00 // SE A FUNCÃO FOR == F9 CONFORME O PARAMETRO DO COMBO DA TELA
begin
PrVenda := Trunc(PrVenda * 100) / 100;
cValor := Resto(PrVenda, 10);
if cValor <= ARREDONDA then // ARREDONDA É IGUAL A 9
cValor := 9 - cValor
else
cValor := 19 - cValor;
dPreco := roundto(PrVenda + cValor, -3);
end
else if (Arredondamento = ARR_NOVE_NOVENTA) then // Final 9.90 // SE A FUNCÃO FOR == F99 CONFORME O PARAMETRO DO COMBO DA TELA
begin
dPreco := PrVenda;
if StrToCurr(Format('%0.2f', [Frac(PrVenda)])) <> 0.90 then
begin
PrVenda := Trunc(PrVenda * 100) / 100;
cValor := Resto(PrVenda, 10);
if (cValor <= ARREDONDA) or (StrToCurr(Format('%0.2f', [Frac(dPreco)])) < 0.90) then // ARREDONDA É IGUAL A 9.90
cValor := 9 - cValor
else
cValor := 19 - cValor;
dPreco := roundto(PrVenda + cValor, -3);
dPreco := dPreco + 0.90;
end
end
else if (Arredondamento = ARR_PROX_INTEIRO) then // Próximo inteiro // SE A FUNCÃO FOR == ARP CONFORME O PARAMETRO DO COMBO DA TELA
dPreco := Ceil(RoundTo(PrVenda, -2))
else if (Arredondamento = ARR_FINAL_NOVENTA) then // Final com 0.90
begin
dPreco := RoundTo(PrVenda, -2);
if StrToCurr(Format('%0.2f', [Frac(PrVenda)])) < 0.90 then
dPreco := Trunc(dPreco) + 0.90
else if StrToCurr(Format('%0.2f', [Frac(PrVenda)])) > 0.90 then
dPreco := Ceil(RoundTo(PrVenda, -2)) + 0.90
else
dPreco := PrVenda;
end
else
dPreco := PrVenda + cValor;
E a que fiz em java
// Metodo para calcular precificaçao do Produto
private static BigDecimal calculaPrecoFinal99(BigDecimal valor){
BigDecimal bdValor = new BigDecimal(valor.toString());
// Valor padrão
BigDecimal bgEstabelecido9;
bgEstabelecido9 = new BigDecimal("9.00"); // Valor fixo casa 9.00
MathContext mc = new MathContext(2); // 2 casas de precisão
//cria o objeto do tipo int
int res;
res = bdValor.compareTo(bgEstabelecido9); // compara valor do paramentro com bdEstabelecido9
bdValor = bdValor.multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); // Multiplico por 100
BigDecimal prVenda = bdValor = bdValor.divide(new BigDecimal("100"), 2, RoundingMode.HALF_DOWN); // Pego o valor da multiplicação e divido por 100
BigDecimal cValor = prVenda.setScale(2, BigDecimal.ROUND_UP); // Truncando valor
System.out.println("O RESTO É: "+cValor);
cValor = cValor.remainder(bgEstabelecido9, mc); // Pego o resto
// Efetuo a verificacao se é 9 ou 19
BigDecimal newBdCValor = new BigDecimal("0.00");
if(cValor.doubleValue() <= 9){ // No Delphi e 9
System.out.println( "9.00-> " +cValor.doubleValue());
BigDecimal subtrair9 = new BigDecimal("9.00");
cValor = subtrair9.subtract(cValor).setScale(2, RoundingMode.HALF_DOWN);
}else{
System.out.println( "19.00-> " +cValor.doubleValue());
BigDecimal subtrair9 = new BigDecimal("19.00");
cValor = subtrair9.subtract(cValor).setScale(2, RoundingMode.HALF_DOWN);
}
BigDecimal dPreco = prVenda.add(cValor.setScale(2, RoundingMode.CEILING));
return dPreco.setScale(2, RoundingMode.CEILING);
}
Se alguém puder ajudar e deixar ela mais clean agradeço. Obrigado a todos