Mostrar em JTextField numero sem casas se ele for inteiro

3 respostas
F

Bom dia pessoal,

Estou desenvolvendo uma calculadora do mesmo estilo da do Windows.

Entretanto estou com problemas na função de mudar o sinal do número.

Por exemplo:

No JTextField está com o número 7. Quando aperto o botão de -/+ ele aparece -7.0 e se aperto dinovo ele aparece 7.0. Eu não posso ter esse .0 que aparece. Alguem sabe alguma maneira de eu resolver esse problema? Estou trabalhando com Float e quando vou jogar para o JTextField.setText() eu uso o comando String.valueOf(Float) e ele converte para String e carrega.

Abaixo uma a parte do código que faz essa função:

botaoMudaSinal.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				String stringAux;
				if(chave==1){
					numeroAux = numeroAux * -1;
					stringAux=String.valueOf(numeroAux);
					System.out.println("stringAux ="+stringAux);
					campo.setText(stringAux);
					System.out.println(campo.getText());
				}

				else{
					numeroAux2 = numeroAux2 * -1;
					stringAux=String.valueOf(numeroAux2);
					System.out.println("stringAux ="+stringAux);
					campo.setText(stringAux);
					System.out.println(campo.getText());
				}
			};;;; 
		});

3 Respostas

ViniGodoy

Você notou que o código no seu if e no else é exatamente igual?

Você pode retirar a parte igual para fora do if, e evitar duplicações:
botaoMudaSinal.addActionListener(new ActionListener(){  
             public void actionPerformed(ActionEvent e){  
                 String stringAux;  
                 if(chave==1){  
                     numeroAux = numeroAux * -1;  
                     stringAux=String.valueOf(numeroAux);  
                 }  
   
                 else{  
                     numeroAux2 = numeroAux2 * -1;  
                     stringAux=String.valueOf(numeroAux2);  
                 }  
                 System.out.println("stringAux ="+stringAux);  
                 campo.setText(stringAux);  
                 System.out.println(campo.getText());  
             };
         });

Na verdade, acho que se você pensar um pouquinho, poderá eliminar totalmente esse if.

Que tipo de variável são esses números aux? São floats ou doubles?
Se você não quer casas decimais, trabalhe com int.

F

Na verdade eles nao sao iguais, pois utilizam as variaveis globais numeroAux e numeroAux2. É que o código não está completo ai!!!

Essa parte está ok.

Na verdade eu preciso trabalhar com float ou mesmo double, mas não int, pois uma calculadora deve aceitar valores decimais.

O problemas está na hora de converter esse float para String. Mesmo que o valor é inteiro (por exemplo 7.0) ele devolve para a String exatamente 7.0 e não apenas 7. Eu precisaria ver se existe alguma maneira ou método que eu consiga analisar se ele valor é decimal ou inteiro, caso for inteiro eu uso String.valueOf( (int) Float) para passá-lo para inteiro, e caso seja float eu tiro o int String.valueOf(Float)

ViniGodoy

O jeito então é testar…

if (Math.abs(numeroAux) == numeroAux) { stringAux = String.valueOf((int)numeroAux); } else { stringAux = String.valueOf(numeroAux); }

Não entendi pq vc tem duas variáveis. De qualquer forma, você poderia fazer o if só para obter a variável certa, já que o tratamento depois delas é exatamente igual.

botaoMudaSinal.addActionListener(new ActionListener(){  
   public void actionPerformed(ActionEvent e){  
      double nrAux = chave==1 ? numeroAux : numeroAux2;
      nrAux = nrAux * -1;  
      String stringAux = Math.abs(nrAux) == nrAux ? 
            String.valueOf((int)nrAux) : String.valueOf(nrAux);

      System.out.println("stringAux ="+stringAux);  
      campo.setText(stringAux);  
      System.out.println(campo.getText());
   }
}
Criado 29 de outubro de 2009
Ultima resposta 29 de out. de 2009
Respostas 3
Participantes 2