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 
[quote=Giulliano]Po galera…fala sério…com certeza imprimiu com 5
format.setMaximumFractionDigits(5);
é só adaptar pra necessidade dele 
[/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.