Ajuda com Subtração ou Soma entre valores Double

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.

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.

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);

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… !

Obrigado pela ajuda!!!

[quote=heatcold]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);[/quote]

Essa daí é cabulosa… rsrsrs

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;
	}

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.

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);
	}