Arredondar número 0,885650224 para 0,89.
Fala galera tudo bem?
bom, dei uma olhada em alguns códigos e não consegui fazer essa conversão..
preciso arredondar número 0,885650224 para 0,89, e diversos outros números reais para duas ou três casas decimais. Dei uma fuçada no Math mais não encontrei o que eu procuro.
Alguém pode me ajudar?
Obrigado.
Leonardo Lucas
Curtidas 1
Respostas
Gabriel Millian
09/04/2009
Utilize a classe DecimalFormat.
Falow
GOSTEI 0
Jamesond
09/04/2009
olá..
tem uma classe chamada DecimalFormat q eu nao cheguei a usar, mas eu fiz um método pra tratar isso que você precisa
existem 2 metodos chamados Math.ceil(double d) e Math.floor(double d)
suas funcionalidades são as seguintes:
- ceil():
retorna o double resultante do arredondamento PARA CIMA do valor inteiro mais próximo
- floor():
retorna o double resultante do arredondamento PARA BAIXO do valor inteiro mais próximo
logo, eu imaginei que poderia andar com a vírgula do número escolhido para a direita, usar o método e depois voltar a vírgula para seu lugar de origem
o método ficou assim:
;D
//Parâmetros:
/**
* 1 - Valor a arredondar.
* 2 - Quantidade de casas depois da vírgula.
* 3 - Arredondar para cima ou para baixo?
* Para cima = 0 (ceil)
* Para baixo = 1 ou qualquer outro inteiro (floor)
**/
double arredondar(double valor, int casas, int ceilOrFloor) {
double arredondado = valor;
arredondado *= (Math.pow(10, casas));
if (ceilOrFloor == 0) {
arredondado = Math.ceil(arredondado);
} else {
arredondado = Math.floor(arredondado);
}
arredondado /= (Math.pow(10, casas));
return arredondado;
}
GOSTEI 0
Mlevinspuhl
09/04/2009
[quote="JaMeSoNd"]olá..
tem uma classe chamada DecimalFormat q eu nao cheguei a usar, mas eu fiz um método pra tratar isso que você precisa
existem 2 metodos chamados Math.ceil(double d) e Math.floor(double d)
suas funcionalidades são as seguintes:
- ceil():
retorna o double resultante do arredondamento PARA CIMA do valor inteiro mais próximo
- floor():
retorna o double resultante do arredondamento PARA BAIXO do valor inteiro mais próximo
logo, eu imaginei que poderia andar com a vírgula do número escolhido para a direita, usar o método e depois voltar a vírgula para seu lugar de origem
o método ficou assim:
Ta legal o seu código mas na opção teto esta arredondando para mais qualquer numero. ex 1,333333 com 3 casas 1,334. O certo seria arredondar apenas quando for maior que 4. ex. 1,555555 3 casas 1,556 e 1,33333 3 casas 1,333.
Sugestão:
double arredondar(double valor, int casas, int ceilOrFloor) {
double verif,arredondado = valor;
int multp=1;
for (int i =0;i<casas;i++) multp*=10;
arredondado *= multp;
verif = arredondado;
arredondado=Math.floor(arredondado);
verif-=arredondado;
verif=Math.floor(verif*10);
if (verif > 4) arredondado++;
arredondado /= multp;
return arredondado;
}
Valeu
Abs
P.S. Não usei o pow para quem quiser usar em j2me
;D
//Parâmetros:
/**
* 1 - Valor a arredondar.
* 2 - Quantidade de casas depois da vírgula.
* 3 - Arredondar para cima ou para baixo?
* Para cima = 0 (ceil)
* Para baixo = 1 ou qualquer outro inteiro (floor)
**/
double arredondar(double valor, int casas, int ceilOrFloor) {
double arredondado = valor;
arredondado *= (Math.pow(10, casas));
if (ceilOrFloor == 0) {
arredondado = Math.ceil(arredondado);
} else {
arredondado = Math.floor(arredondado);
}
arredondado /= (Math.pow(10, casas));
return arredondado;
}
GOSTEI 0
Colbison Hallyson@hotmail.com
09/04/2009
Ola amigo assim é a maneira mais simples possivel
double numero = 0.885650224 ;
System.out.printf("%.2f",numero);
usando printf e pronto
GOSTEI 0
Colbison Hallyson@hotmail.com
09/04/2009
[quote="halls"]Ola amigo assim é a maneira mais simples possivel
double numero = 0.885650224 ;
System.out.printf("%.2f",numero);
usando printf e pronto
Isso é muito bom, bom mesmo quando se usa console...
Tela do velho DOS exibindo resultado...
Programadores do velho Dev C usavam o mesmo tipo de instrução, mesmo nome obviamente sem o System.out.
%d para inteiro, %f para float, %c para char, %s para string, %p para endereço, ponteiro e etc.
Isso já foi-se a tempos... Ou vamos dar "marcha ré" na tecnologia?
Bom, primeiro, algoritmo serve para diversas aplicações e linguagens mas o objetivo aqui seria aproveitar, em um bom nível, um código que em situações requerem transformações de variáveis:
Uma variável double numero = 0.885650224 passa para um método e transforma em double numero = 0.89 com parâmetro de (2 casas decimais).
Pelo que entendi foi isso.
Valeu t+
GOSTEI 0
Colbison Hallyson@hotmail.com
09/04/2009
há uma pequena consideração a se fazer aqui: você quer arrendondar a exibição do número ou o valor dele realmente?
se quer arredondar a exibição a DecimalFormat como já dito faz isso:
agora...se vc quer arrendondar o valor exato em si (para utilizar em cálculos e tudo mais), terá que usar a classe BigDecimal.. vc não vai conseguir precisão utilizando números de ponto flutuante (float and double)... vc pode fazer assim para isso:
com a classe BigDecimal você terá certeza que estará trabalhando sempre na precisão desejada
double valor = .885650224;
new DecimalFormat("0.00").format(valor)
double valor = .885650224;
BigDecimal valorExato = new BigDecimal(numero)
.setScale(2, RoundingMode.HALF_DOWN);
GOSTEI 0
Colbison Hallyson@hotmail.com
09/04/2009
[quote="Leogibson"]Fala galera tudo bem?
bom, dei uma olhada em alguns códigos e não consegui fazer essa conversão..
preciso arredondar número 0,885650224 para 0,89, e diversos outros números reais para duas ou três casas decimais. Dei uma fuçada no Math mais não encontrei o que eu procuro.
Alguém pode me ajudar?
Obrigado.
Leo esse exemplo arredonda para cima, OU SEJA, 0,89;
double xx = 0.885650224;
BigDecimal teste = new BigDecimal(xx);
teste = teste.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(teste);
e esse arredonda para baixo, OU SEJA, 0,88;
double xx = 0.885650224;
BigDecimal teste = new BigDecimal(xx);
teste = teste.setScale(2, BigDecimal.ROUND_DOWN);
System.out.println(teste);
GOSTEI 0
Colbison Hallyson@hotmail.com
09/04/2009
public class Main {
public static void main(String[] args) {
Float val = (float) (1111 * 0.867 /100);
System.out.println("Val :" + val);
String valStr = String.format("%06.2f%n", val);
System.out.println("ValStr :" + valStr);
val = str2Float(valStr);
System.out.println("Val :" + val);
}
public static Float str2Float(String longStr) {
try {
return Float.parseFloat(longStr);
} catch (Exception e) {
return 0F;
}
}
}
GOSTEI 0
Colbison Hallyson@hotmail.com
09/04/2009
Tente fazer desta maneira:
this.setResultado(this.getValorA().divide(getValorB(), 2, RoundingMode.HALF_EVEN));
GOSTEI 0