Problema com Casas Decimais (BigDecimal)

7 respostas
F

Boa Noite!

Estou com um problema… Estou montado uma calculadora que tem um campo “visor” e outro de “entrada” que recebe o valor do visor quando clicado no botão “enter”. Tenho ainda o botão mais e menos para casas decimais (limitado a 9 casas). Está tudo funcionando perfeitamente, mas quando o valor do visor é transportado para o campo entrada e em seguida tento aumentar ou diminuir as casas decimais tenho uma “exception” que lista as seguintes linhas do código:

a) o return que formata os números (return dec.format(new java.math.BigDecimal(s));”) na função formatStrNum

b) a inclusão do texto no campo entrada (input.setText(formatStrNum(vlinput, vldecimals));”)

c) o actionListener do botão respectivo (else if(ccf.getSource() == btn100)	dcpls();”)

Desde então, apenas o campo “visor” sofre alteração de casas decimais quando clico nos botões que aumenta/diminui o número de casas.

Seguem os trechos do código:

private JTextField display, input, output, memorybox;
		private String vldisplay = "0,00", vlinput = "0,00", vloutput = "0,00", vlmemory = "0,00";
		private int vldecimals = 2;
public void numbr(String s) {
			
			if(vldisplay == "0,00") vldisplay = "";		
			vldisplay = vldisplay + s;
			display.setText(formatStrNum(vldisplay, vldecimals));

		}

		public void comma() {
			
			vldisplay = vldisplay + ".";
			display.setText(formatStrNum(vldisplay, vldecimals));
			
		}

		public void dcpls() {
			
			if(vldisplay == "0,00")	vldisplay	= "0";
			if(vlinput == "0,00")	vlinput		= "0";
			if(vloutput == "0,00")	vloutput	= "0";
			if(vlmemory == "0,00")	vlmemory	= "0";
			
			if(vldecimals < 9) {
				vldecimals = vldecimals + 1;
				decimals.setText(String.valueOf(vldecimals));
				display.setText(formatStrNum(vldisplay, vldecimals));
				input.setText(formatStrNum(vlinput, vldecimals));
				output.setText(formatStrNum(vloutput, vldecimals));
				memorybox.setText(formatStrNum(vlmemory, vldecimals));
			}
			else {
				vldecimals = vldecimals;
				decimals.setText(String.valueOf(vldecimals));
				display.setText(formatStrNum(vldisplay, vldecimals));
				input.setText(formatStrNum(vlinput, vldecimals));
				output.setText(formatStrNum(vloutput, vldecimals));
				memorybox.setText(formatStrNum(vlmemory, vldecimals));
			}
				
		}
		
		public void dclss() {

			if(vldisplay == "0,00")	vldisplay	= "0";
			if(vlinput == "0,00")	vlinput		= "0";
			if(vloutput == "0,00")	vloutput	= "0";
			if(vlmemory == "0,00")	vlmemory	= "0";
			
			if(vldecimals > 0) {
				vldecimals = vldecimals - 1;
				decimals.setText(String.valueOf(vldecimals));
				display.setText(formatStrNum(vldisplay, vldecimals));
				input.setText(formatStrNum(vlinput, vldecimals));
				output.setText(formatStrNum(vloutput, vldecimals));
				memorybox.setText(formatStrNum(vlmemory, vldecimals));
			}
			else {
				vldecimals = vldecimals;
				decimals.setText(String.valueOf(vldecimals));
				display.setText(formatStrNum(vldisplay, vldecimals));
				input.setText(formatStrNum(vlinput, vldecimals));
				output.setText(formatStrNum(vloutput, vldecimals));
				memorybox.setText(formatStrNum(vlmemory, vldecimals));
			}
				
		}
			
		public void enter() {
			
			vlinput = display.getText();
			input.setText(vlinput);
			vldisplay = "0";
			display.setText(formatStrNum(vldisplay, vldecimals));


		}

		public void bkspc() {
			
			if(vldisplay.length() == 1) vldisplay = "0";
			else vldisplay = vldisplay.substring(0, vldisplay.length() -1);
			display.setText(formatStrNum(vldisplay, vldecimals));
			
		}
		
		public void cldpy() {
			
			vldisplay = "0";
			display.setText(formatStrNum(vldisplay, vldecimals));
						
		}
		
		public void clall() {
			
			vldisplay	= "0";
			display.setText(formatStrNum(vldisplay, vldecimals));
			vlinput		= "0";
			input.setText(formatStrNum(vlinput, vldecimals));
			vloutput	= "0";
			output.setText(formatStrNum(vloutput, vldecimals));
			vlmemory	= "0";
			memorybox.setText(formatStrNum(vlmemory, vldecimals));
			
		}
	
		public String formatStrNum(String s, int d) {
		
			DecimalFormat dec = new DecimalFormat();
			DecimalFormatSymbols sym = new DecimalFormatSymbols();
			
			sym.setGroupingSeparator('.');
			sym.setDecimalSeparator(',');
			
			dec.setMinimumFractionDigits(d);
			dec.setMaximumFractionDigits(d);
			dec.setDecimalFormatSymbols(sym);
			
			return dec.format(new java.math.BigDecimal(s));
			
		}

Agradeço antecipadamente a ajuda que algém possa me dar.

Abraço,

ffranco

7 Respostas

F

Olá,

Alguém pode me ajudar com isto?

Obrigado,

ffranco

T

vldisplay == “0,00” (usar == para comparar strings)

não funciona em Java.

Você precisa usar “equals”.

F

Prezado thingol,

Obrigado, pela resposta, mas como eu previa, isto não resolveu meu problema, até porque como disse tudo funciona normalmente até que eu clique em “enter” e em seguida tente aumentar ou diminuir as casas decimais.

Se vc ou alguém mais puder me ajudar a identificar o problema eu agradeço muito.

ffranco

F

Boa Tarde, Pessoal.

Seria possível alguém me dar uma ajuda nisso?

Obrigado,

ffranco

F

???

F

Pessoal,

Não sei por quê mas tô tentando conseguir uma explicação/solução para meu problema desde 13/11/06 e não consegui até agora…

Tem algum motivo?

Alguém pode me responder?

ffranco

romuloff

tópico antigo mas se alguem tiver o mesmo problema creio que a solução era utilizar o setScale do BigDecimal …
http://www.guj.com.br/posts/list/52052.java

de qquer forma faltou uma descrição melhor da exceção pelo usuario ffranco

Criado 13 de novembro de 2006
Ultima resposta 23 de jul. de 2009
Respostas 7
Participantes 3