Eu possuo um textfield aonde são inseridos valores monetários, e conforme eu ia clicando no botao adicionar gostaria que fosse aparecendo o total (contador) em um textfield, o sistema funciona porém após alguns cálculos ele aparece com várias casas decimais, gostaria de saber o porque disso sendo que todos os números inseridos são sempre com duas casas decimais e se possível como limitar a aparecer somente duas…
String total = fmt_valorCheque.getText().replace(",", "."); // Como se trata de dinheiro tive que substituir a , por . para efetuar a operação;
lbl_total.setText(""+ (Double.parseDouble(total)+Double.parseDouble(lbl_total.getText())));
Aproveitando, teria como exibir o total em um textfield? tentei mas não consegui.
Para exibir o total em um JTextField a rotina é exatamente a mesma (setText), então não entendi qual a sua dificuldade.
De qualquer maneira, para mostrar o número adequado de casas decimais, você pode usar String.format (mais fácil) ou java.text.NumberFormat (mais chato). Para efetuar a conversão, é melhor usar o método adequado, que é NumberFormat .parse. Vou dar um exemplo.
double valorCheque, valorTotal;
NumberFormat nf = NumberFormat.getCurrencyInstance (); // formato de moeda
valorCheque = nf.parse (fmt_valorCheque.getText()).doubleValue();
valorTotal = nf.parse (lbl_total.getText()).doubleValue();
valorTotal = valorTotal + valorCheque;
lbl_total.setText (nf.format (valorTotal)); // formata o valor em formato de moeda
C
Crivelli
Olá, testei o código que me passou e obtive o seguinte erro:
<blockquote>16/04/2009 14:18:19 cadastros.CadastroClientes setTotal
SEVERE: null
java.text.ParseException: Unparseable number: "33,43"
at java.text.NumberFormat.parse(NumberFormat.java:309)
at cadastros.CadastroClientes.setTotal(CadastroClientes.java:313)
at cadastros.CadastroClientes.btn_addActionPerformed(CadastroClientes.java:238)
at cadastros.CadastroClientes.access$200(CadastroClientes.java:22)
at cadastros.CadastroClientes$4.actionPerformed(CadastroClientes.java:120)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5517)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5282)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3984)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
</blockquote>
O fmt_valorCheque já vem formatado com , para decimais e . para milhares, entao quando tenho por exemplo o número 1.204,00 ele fica com várias casas decimais nao somente 2.
T
thingol
Tá bom, esqueci que getCurrencyInstance requer que você ponha o símbolo de real (R$) na entrada, como “R$ 33,69”). Altere o seu programa para:
Funcionou quase 100% agora ele da erro em números com milhares, acho que é por causa do ponto, por exemplo 2.222,22 ficou apenas 2,00... se eu remover o ponto funcionaria né!?
--- edit ---
Fiz assim e funcionou... o número no label ficara sem o ponto no milhar mas não é algo de extrema necessidade...
Obrigado!!!