Ajuda com Subtração ou Soma entre valores Double

8 respostas
D

Se alguem puder me ajudar, é o seguite, estou fazendo uma soma entre 2 valores Double ex: 573.67 + 109.4 e o resultado é = 683.06999999. Gostaria de saber como faço para esse resultado ficar 683.07 ?

Obrigado.

8 Respostas

R

Boa tarde daniel, são várias maneiras de se fazer… uma delas é utilizando decimal format… Olha ai amigo.

import java.text.DecimalFormat;

public class somaDouble {

	public static void main(String[] args) {

		Double num1 = 573.67;
		Double num2 = 109.4;

		Double soma = num1 + num2;

		DecimalFormat df = new DecimalFormat("#,###.00");

		System.out.println(df.format(soma));

	}
}

Qualquer coisa estou aew…

abraços.

H
double x = 573.67;

double y = 109.4;

double z = x + y;

System.out.println(z);

z = z * 100;

z = Math.round(z);

z = z / 100;

System.out.println(z);
R

Outra forma seria assim:

public class somaDouble {

	public static void main(String[] args) {

		Double num1 = 573.67;
		Double num2 = 109.4;

		Double soma = num1 + num2;

		System.out.printf("%.2f", soma);

	}
}

vlw, abraços amigo.

qualquer coisa é só perguntar… !

D

Obrigado pela ajuda!!!

R
<blockquote><div class="quote-author">heatcold:</div>double x = 573.67;

double y = 109.4;

double z = x + y;

System.out.println(z);

z = z * 100;

z = Math.round(z);

z = z / 100;

System.out.println(z);</blockquote>

Essa daí é cabulosa… rsrsrs

T

O Math.round() remove a parte fracionária de um número.
Você pode usar uma função assim:

public static double round2Decimals(double numero) {
		double result = numero * 100;
		result = Math.round(result);
		result = result / 100;
		return result;
	}
R

Depende do seu problema, você quer simplesmente gerar uma String do número ou precisa manter a representação decimal exata em memória ? No primeiro caso, você pode usar tanto o DecimalFormat ou o String.format. Caso você precise de uma representação exata do número em memória, que me parece ser o seu caso, então você precisa usar a classe BigDecimal ao invés de double ou float.

T

Usando a dica do BigDecimal fica bem melhor.
Refatorei a função que eu havia postado :stuck_out_tongue:

public static BigDecimal round2Decimals(double numero) {
		final BigDecimal decimal = new BigDecimal(numero);
		
		// numero de casas da parte inteira (para 683.0699 serão 3 casas) 
		int inteiros = decimal.precision() - decimal.scale();
		int fracao = 2;
		
		MathContext mathContext = new MathContext(inteiros + fracao, RoundingMode.HALF_UP);
		return decimal.round(mathContext);
	}
Criado 25 de janeiro de 2012
Ultima resposta 25 de jan. de 2012
Respostas 8
Participantes 5