Restringir double para apenas duas casas decimais

Olá pessoal, meu aplicativo super simples apenas de calcular a soma das compras…
Mas como eu restrinjo o meu total para apenas duas casas decimais?

meu código

[code]
import java.text.DecimalFormat;
import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.app.Dialog;
import android.os.Bundle;
import android.widget.;
import android.view.
;
import android.app.*;

public class MainActivity extends Activity {

CheckBox chkarroz, chkleite, chkfeijao, chkcarne;

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);

	chkarroz = (CheckBox) findViewById(R.id.chkarroz);
	chkleite = (CheckBox) findViewById(R.id.chkleite);
	chkcarne = (CheckBox) findViewById(R.id.chkcarne);
	chkfeijao = (CheckBox) findViewById(R.id.chkfeijao);

	Button btotal = (Button) findViewById(R.id.btotal);
	btotal.setOnClickListener(new View.OnClickListener() {

		@Override
		public void onClick(View arg0) {
			double total = 0;

			if (chkarroz.isChecked()) {
				total += 2.69;
			}

			if (chkleite.isChecked()) {
				total += 5.00;
			}
			if (chkcarne.isChecked()) {
				total += 9.70;
			}
			if (chkfeijao.isChecked()) {
				total += 2.30;
			}

			AlertDialog.Builder dialogo = new AlertDialog.Builder(
					MainActivity.this);
			dialogo.setTitle("Aviso");
			dialogo.setMessage("Valor total da compra R$"
					+ String.valueOf(total));
			dialogo.setNeutralButton("OK", null);

			dialogo.show();

		}
	});

}[/code]
1 curtida

Melhor trabalhar com BigDecimal:

Double latitude = 1.21456D;
NumberFormat format = NumberFormat.getInstance();
format.setMaximumFractionDigits(5);
format.setMinimumFractionDigits(2);
format.setMaximumIntegerDigits(2);
format.setRoundingMode(RoundingMode.HALF_UP);
latitude = Double.valueOf(format.format(latitude));

[quote=Giulliano] Double latitude = 1.21456D; NumberFormat format = NumberFormat.getInstance(); format.setMaximumFractionDigits(5); format.setMinimumFractionDigits(2); format.setMaximumIntegerDigits(2); format.setRoundingMode(RoundingMode.HALF_UP); latitude = Double.valueOf(format.format(latitude)); [/quote]
Você chegou a testar esse código aí?

jkrfabio, eu concordo com o Régis que se tratando de valores monetários, é melhor usar BigDecimal. Agora se simplesmente quer cortar casas decimais, pode fazer assim: public static void main(String[] args) { Double valor = 1.32158703; valor = Double.valueOf(String.format(Locale.US, "%.2f", valor)); System.out.println(valor); }

Para arredondar para baixo, tente:

valor = Double.valueOf(String.format(Locale.US, “%.2f”, Math.floor(valor)));

Se for arredondar para cima:

valor = Double.valueOf(String.format(Locale.US, “%.2f”, Math.ceil(valor)));

[quote=Rodrigo Sasaki][quote=Giulliano] Double latitude = 1.21456D; NumberFormat format = NumberFormat.getInstance(); format.setMaximumFractionDigits(5); format.setMinimumFractionDigits(2); format.setMaximumIntegerDigits(2); format.setRoundingMode(RoundingMode.HALF_UP); latitude = Double.valueOf(format.format(latitude)); [/quote]
Você chegou a testar esse código aí?
[/quote]

Particularmente não testei dada a simplicidade…mas posso te gartantir que funciona. Se não funcionou pra vc dê uma olhada em qual o Locale sua JVM está usando, lembrando que algumas usam vírgula e outras usam ponto para separar milhares.

[quote=Giulliano][quote=Rodrigo Sasaki][quote=Giulliano] Double latitude = 1.21456D; NumberFormat format = NumberFormat.getInstance(); format.setMaximumFractionDigits(5); format.setMinimumFractionDigits(2); format.setMaximumIntegerDigits(2); format.setRoundingMode(RoundingMode.HALF_UP); latitude = Double.valueOf(format.format(latitude)); [/quote]
Você chegou a testar esse código aí?
[/quote]

Particularmente não testei dada a simplicidade…mas posso te gartantir que funciona. Se não funcionou pra vc dê uma olhada em qual o Locale sua JVM está usando, lembrando que algumas usam vírgula e outras usam ponto para separar milhares.[/quote]
Pode garantir mesmo? Pois ele retorna um número com até 5 casas decimais.

[quote=Rodrigo Sasaki][quote=Giulliano][quote=Rodrigo Sasaki][quote=Giulliano] Double latitude = 1.21456D; NumberFormat format = NumberFormat.getInstance(); format.setMaximumFractionDigits(5); format.setMinimumFractionDigits(2); format.setMaximumIntegerDigits(2); format.setRoundingMode(RoundingMode.HALF_UP); latitude = Double.valueOf(format.format(latitude)); [/quote]
Você chegou a testar esse código aí?
[/quote]

Particularmente não testei dada a simplicidade…mas posso te gartantir que funciona. Se não funcionou pra vc dê uma olhada em qual o Locale sua JVM está usando, lembrando que algumas usam vírgula e outras usam ponto para separar milhares.[/quote]
Pode garantir mesmo? Pois ele retorna um número com até 5 casas decimais.[/quote]Testei com o código:

Locale.setDefault(Locale.US); // <================================== Double latitude = 1.21456D; NumberFormat format = NumberFormat.getInstance(); format.setMaximumFractionDigits(5); format.setMinimumFractionDigits(2); format.setMaximumIntegerDigits(2); format.setRoundingMode(RoundingMode.HALF_UP); latitude = Double.valueOf(format.format(latitude)); System.out.println(latitude);

E imprimiu com 5.

Po galera…fala sério…com certeza imprimiu com 5

format.setMaximumFractionDigits(5);

é só adaptar pra necessidade dele :confused:

[quote=Giulliano]Po galera…fala sério…com certeza imprimiu com 5

format.setMaximumFractionDigits(5);

é só adaptar pra necessidade dele :confused:
[/quote]Então da próxima vez explica isso, cara.

Se ele está postando, é pq ele não entendeu. Você não explicou nada do código e tem gente (não digo que é o caso de quem abriu o tópico) que não saberia analisar os métodos utilizados.