Arredondar número 0,885650224 para 0,89.

Java

09/04/2009

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

Leonardo Lucas

Curtidas 1

Respostas

Gabriel Millian

Gabriel Millian

09/04/2009

Utilize a classe DecimalFormat. Falow
GOSTEI 0
Jamesond

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:
	//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;
	}
;D
GOSTEI 0
Mlevinspuhl

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:
	//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;
	}
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
GOSTEI 0
Colbison Hallyson@hotmail.com

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

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

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:
    double valor = .885650224;
    new DecimalFormat("0.00").format(valor)
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:
        double valor = .885650224;
        BigDecimal valorExato = new BigDecimal(numero)
                .setScale(2, RoundingMode.HALF_DOWN);
com a classe BigDecimal você terá certeza que estará trabalhando sempre na precisão desejada
GOSTEI 0
Colbison Hallyson@hotmail.com

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

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;
 		}
 	}
}
Output: Val :9.63237 ValStr :009.63 Val :9.63[/code]
GOSTEI 0
Colbison Hallyson@hotmail.com

Colbison Hallyson@hotmail.com

09/04/2009

Tente fazer desta maneira:
this.setResultado(this.getValorA().divide(getValorB(), 2, RoundingMode.HALF_EVEN));
GOSTEI 0
POSTAR