Pessoal, encontrei a solução para um post que abri ha uma semana atrás, esta funcionando para todos os números abaixo de 9.00, ao digitar por exemplo 8.99 ele calcula 9.00, outro valor 5.10 ele calcula para 9.00, é um padrão para lojas, mas ao digitar 9.00 e 12, o nove, deveria ficar nove mesmo, já o 12, teria que ser 19.00, e ai por diante. Segue algoritmo, se alguém puder me ajudar agradeço.
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
public class CalcularPressificacaoFinal9 {
public static void main(String[] args) {
BigDecimal vlr = new BigDecimal("9.00");
BigDecimal resultado = calculaPrecoFinal9(vlr); // Chama método para calcular precificação
System.out.println("Precificação9.00: R$ " +resultado);
}
// Metodo para calcular precificaçao do Produto 9.00
private static BigDecimal calculaPrecoFinal9(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
cValor = cValor.remainder(bgEstabelecido9, mc); // Pego o resto
System.out.println("RESTO: " +cValor);
// Efetuo a verificacao se é 9 ou 19
BigDecimal newBdCValor = new BigDecimal("0.00");
if(cValor.doubleValue() <= 9.00){ // No Delphi e 9
BigDecimal subtrair9 = new BigDecimal("9.00");
System.out.println("Resto e nove "+cValor+ " | " +subtrair9);
cValor = subtrair9.subtract(cValor).setScale(2, RoundingMode.HALF_DOWN);
System.out.println("Falta: "+cValor+ " Para 9.00");
//cValor = cValor.add(cValor);
}else{
BigDecimal subtrair9 = new BigDecimal("19.00");
cValor = subtrair9.subtract(cValor).setScale(2, RoundingMode.HALF_DOWN);
System.out.println(cValor);
//cValor = cValor.add(cValor);
}
Double numberDb;
// Round, em varios locais do sistema utilizo
numberDb = round(prVenda.doubleValue(), cValor.doubleValue(), 3, BigDecimal.ROUND_HALF_UP);
System.out.println("Vou somar prVenda e cValor: "+prVenda + " | " +cValor);
System.out.println("round com soma "+numberDb);
BigDecimal dPreco = new BigDecimal(numberDb);
return dPreco.setScale(2, RoundingMode.CEILING);
}
public static double round(double unroundesSun, double unrounded, int precision, int roundingMode)
{
BigDecimal bd = new BigDecimal(unrounded);
BigDecimal bd2 = new BigDecimal(unroundesSun);
bd = bd.add(bd2);
BigDecimal rounded = bd.setScale(precision, roundingMode);
return rounded.doubleValue();
}
}
Pessoal boa tarde tudo bem, consegui decifrar em partes, agora digito para meus números < 9.00 e exibem sempre arredondamento 9.00 e para meus < 19.00 vai ser exibido 19.00, como no exemplo 1.90 vai exibir 9.00, digitar 15.47 vai ficar 19.00, mas agora o problema e números maiores que isso, tipo 19.10, teria que arredondar agora para 29.00, e se digitar 29.45, arredondar para 39.00, sempre seguindo 9, segue o que eu consegui fazer abaixo, deve ser um pequeno detalhe para eu concluir, se vocês puderem me dar um Help agradeço.
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
public class CalcularPressificacaoFinal9 {
public static void main(String[] args) {
BigDecimal vlr = new BigDecimal("19.00");
BigDecimal resultado = calculaPrecoFinal9(vlr); // Chama método para calcular precificação
System.out.println("Precificação9.00: R$ " +resultado);
}
// Metodo para calcular precificaçao do Produto 9.00
private static BigDecimal calculaPrecoFinal9(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
cValor = cValor.remainder(bgEstabelecido9, mc); // Pego o resto
System.out.println("RESTO: " +cValor);
// Efetuo a verificacao se é 9 ou 19
BigDecimal newBdCValor = new BigDecimal("0.00");
if(bdValor.doubleValue() <= 9.00){ // No Delphi e 9
BigDecimal subtrair9 = new BigDecimal("9.00");
System.out.println("Resto e nove "+cValor+ " | " +subtrair9);
if(bdValor.doubleValue() == 9.00){ // Tenho que setar nove ser digitar 9.00
BigDecimal cValorZero = new BigDecimal("9.00");
cValor = cValorZero;
}
System.out.println(bdValor);
cValor = subtrair9.subtract(cValor).setScale(2, RoundingMode.HALF_DOWN);
System.out.println("Falta: "+cValor+ " Para 9.00");
//cValor = cValor.add(cValor);
}else{
BigDecimal subtrair9 = new BigDecimal("19.00");
System.out.println("else subtrair9 "+subtrair9+ " | " +cValor);
cValor = subtrair9.subtract(prVenda).setScale(2, RoundingMode.HALF_DOWN);
//cValor = cValor.add(cValor);
}
Double numberDb;
// Round, em varios locais do sistema utilizo
numberDb = round(prVenda.doubleValue(), cValor.doubleValue(), 3, BigDecimal.ROUND_HALF_UP);
System.out.println("Vou somar prVenda e cValor: "+prVenda + " | " +cValor);
System.out.println("round com soma "+numberDb);
BigDecimal dPreco = new BigDecimal(numberDb);
return dPreco.setScale(2, RoundingMode.CEILING);
}
public static double round(double unroundesSun, double unrounded, int precision, int roundingMode)
{
BigDecimal bd = new BigDecimal(unrounded);
BigDecimal bd2 = new BigDecimal(unroundesSun);
bd = bd.add(bd2);
BigDecimal rounded = bd.setScale(precision, roundingMode);
return rounded.doubleValue();
}
}
valor = valor.add(BigDecimal.ONE);
valor = valor.divide(BigDecimal.TEN, 0, BigDecimal.ROUND_UP);
valor = valor.multiply(BigDecimal.TEN);
valor = valor.subtract(BigDecimal.ONE);
return valor;