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
importjava.text.DecimalFormat;importjava.util.Locale;importandroid.os.Bundle;importandroid.app.Activity;importandroid.view.Menu;importandroid.view.View;importandroid.app.Dialog;importandroid.os.Bundle;importandroid.widget.*;importandroid.view.*;importandroid.app.*;publicclassMainActivityextendsActivity{CheckBoxchkarroz,chkleite,chkfeijao,chkcarne;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){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);Buttonbtotal=(Button)findViewById(R.id.btotal);btotal.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewarg0){doubletotal=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.Builderdialogo=newAlertDialog.Builder(MainActivity.this);dialogo.setTitle("Aviso");dialogo.setMessage("Valor total da compra R$"+String.valueOf(total));dialogo.setNeutralButton("OK",null);dialogo.show();}});}
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));
R
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);
}
I
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)));
G
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.
R
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.
H
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.
G
Giulliano
Po galera…fala sério…com certeza imprimiu com 5
format.setMaximumFractionDigits(5);
é só adaptar pra necessidade dele
H
Hebert_Coelho
Giulliano:
Po galera…fala sério…com certeza imprimiu com 5
format.setMaximumFractionDigits(5);
é só adaptar pra necessidade dele
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.