Restringir double para apenas duas casas decimais

9 respostas
jkrfabio

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

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

			}
		});

	}

9 Respostas

regis_hideki

Melhor trabalhar com BigDecimal:

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

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

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

ideiainformatica

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

Giulliano

Rodrigo Sasaki:
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));

Você chegou a testar esse código aí?

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.

Rodrigo_Sasaki

Giulliano:
Rodrigo Sasaki:
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));

Você chegou a testar esse código aí?

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.


Pode garantir mesmo? Pois ele retorna um número com até 5 casas decimais.

Hebert_Coelho

Rodrigo Sasaki:
Giulliano:
Rodrigo Sasaki:
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));

Você chegou a testar esse código aí?

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.


Pode garantir mesmo? Pois ele retorna um número com até 5 casas decimais.
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.

Giulliano

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

format.setMaximumFractionDigits(5);

é só adaptar pra necessidade dele :confused:

Hebert_Coelho

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

format.setMaximumFractionDigits(5);

é só adaptar pra necessidade dele :confused:

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.

Criado 27 de março de 2013
Ultima resposta 27 de mar. de 2013
Respostas 9
Participantes 6