Como pegar duas casas decimais

4 respostas
F

Boa noite companheiros, tenho o seguinte rotina.

public void calcula_imposto()
{
  String tipo;
tipo =  (String) cb_tipo.getSelectedItem();
if ((tipo == "PJ"))
{
  String result, snota;
  double nota,pis,cofins,ir,csll;
  snota = tx_vr_nota.getText();
  nota = Double.parseDouble(snota);
      if ((nota >= 666.66) && (nota <= 5000.00))
        {
      
        ir = (nota * 0.015);         
        result = String.valueOf(ir);
        tx_ir.setText(result+"0");
        tx_cofins.setText("0.00");
       tx_csll.setText("0.00");
       tx_pis.setText("0.00");

       lab_situacao.setText("Houve Retenções de IR");
       }
     else   if (nota >= 5000.01)
       {
        pis = (nota * 0.0065);
        result = String.valueOf(pis);
        tx_pis.setText(result+"0");

        cofins = (nota * 0.03);
        result = String.valueOf(cofins);
        tx_cofins.setText(result+"0");

        csll = (nota * 0.01);
        result = String.valueOf(csll);
        tx_csll.setText(result+"0");

        ir = (nota * 0.015);
        result = String.valueOf(ir);
        tx_ir.setText(result+"0");

        lab_situacao.setText("Houve Retenções IR, PIS, COFINS, CSLL");
       }     
      else if (nota < 666.66)
       {
        tx_cofins.setText("0.00");
        tx_csll.setText("0.00");
        tx_ir.setText("0.00");
        tx_pis.setText("0.00");
        lab_situacao.setText("Não Houve Retenções");
       }
}

 else if ((tipo == "PF"))
      {
       tx_cofins.setText("0.00");
       tx_csll.setText("0.00");
       tx_ir.setText("0.00");
       tx_pis.setText("0.00");
       lab_situacao.setText("Não houve retenções para PF");
      }
 else if ((tipo == "Sem Retenções"))
      {
       tx_cofins.setText("0.00");
       tx_csll.setText("0.00");
       tx_ir.setText("0.00");
       tx_pis.setText("0.00");
       lab_situacao.setText("Excluido de Retenção");
      }
}

Esse procedimeno funciona perfeitamente, so que quero que ele sete em um campo de texto o resultado com apenas duas casas decimais.

Ex. 10/3 = 3.33333333333333333

Eu quero o resultado assim 3.33
Só isso, se alguem poder me ajudar.

Valeu!!!

4 Respostas

L

tenta assim

DecimalFormat decimal = new DecimalFormat( "0.00" );
V

Olhe um exemplo:

txtCofins.setText(String.format("%.02fd", cofins));
F

Olá ViniGodoy.
Sua ideia funcionou perfeitamente, setando somente duas casas depois do ponto.
Mais tem um detalhe, antes ele estava salvando normal os dados no banco, so que agora ele cai em um erro.
Antes nao precisava converter nada para salvar no banco, agora cai no em um erro.

Para salvar uso esse linha aqui:

String sql = "insert into nota_fiscal"+lb_num_empresa.getText()+"  (num_nota,vr_nota,ir,pis,cofins,csll,mes) values ('"+tx_num_nota.getText()+"','"+tx_vr_nota.getText()+"','"+tx_ir.getText()+"','"+tx_pis.getText()+"','"+tx_cofins.getText()+"','"+tx_csll.getText()+"','"+lb_periodo.getText()+"')";

So que agora nao funciona, por favor me da mais um ideia ai.

V

Essa forma de salvar aí é completamente incorreta. Ela não só depende do formato do número, como também é vulnerável a ataques de SQL Injection. Ou, de maneira mais simplista, vai quebrar caso um dos seus campos tenha apóstrofe no nome (experimente tentar salvar como empresa o MacDonald’s).

O ideal é trabalhar com o PreparedStatement, e com os tipos certos de dados. O código fica mais limpo e mais claro.
Veja um exemplo:

String sql = "INSERT INTO nota_fiscal(num_nota, vr_nota, ir, pis, cofins, csll, mes) VALUES (?,?,?,?,?,?,?)"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setInteger(1, Integer.parseInt(tx_num_nota.getText())); stmt.setDouble(2, Double.parseDouble(tx_vr_nota.getText())); stmt.setDouble(3, Double.parseDouble(tx_ir.getText())); stmt.setDouble(4, Double.parseDouble(tx_pis_nota.getText())); stmt.setDouble(5, Double.parseDouble(tx_cofins_nota.getText())); stmt.setDouble(6, Double.parseDouble(tx_pis_csll.getText())); stmt.setInteger(7, Integer.parseInt(tx_mes.getText())); stmt.executeUpdate();

É impressão minha ou vc também tem uma tabela diferente para cada empresa? Isso não é uma boa forma de se trabalhar.
Procure ler um pouco sobre normalização de dados e teoria geral de banco de dados.

Aparentemente, seu banco está incorreto nesse sentido também (alguns campos tem dependência transitiva, o que fere a terceira forma normal).

Outra coisa. Cuidado, não se compara Strings com ==. Use o método equals

if (tipo.equals("PJ")) {
Criado 17 de setembro de 2011
Ultima resposta 19 de set. de 2011
Respostas 4
Participantes 3