Funcao Delphi para Java com BigDecimal

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 :wink:

Já trabalhei muito com Delphi no passado, posso recordar de alguma coisa, mas você precisa apontar melhor sua dúvida ao invés de por como “jogo de 7 erros”. Você por exemplo falou de BigDecimal no Java mas no Delphi não especificou o tipo usado atualmente, não tendo a declaração da variável ou parâmetro. Poderia começar listando especificamente os “comandos” em Delphi que não sabe o que é, ou tipo de dados usado na função existente em Delphi, pra quem for responder mostrar o equivalente.

Olá amigo bom dia, ok obrigado, vou ver se consigo fazer ela aqui e posto a solução, só pedi para ver se alguém já sabia ou já usa alguma coisa do Gênero. Abraço.