Solved

Need a DecimalFormat for a NumberFormatter for a JFormattedTextField

Posted on 2009-07-13
11
330 Views
Last Modified: 2013-12-29
Below is my code.  My JFormattedTextField is numberField.  I need a format (pattern) for the following:

100.00000         needs to appear as    100.000
10000.123456   needs to appear as    10000.123
1.055E9             needs to appear as    1055000000.000
211.E9               needs to appear as    211000000000.000

is there a pattern to do this?  

Thank You
NumberFormatter doubleFormatter = new NumberFormatter(new DecimalFormat("#0.000#"));

doubleFormatter.setAllowsInvalid(false);

numberField.setFormatterFactory(new DefaultFormatterFactory(doubleFormatter));

numberField.setColumns(10);

numberField.setValue(0.0);

Open in new window

0
Comment
Question by:gdkinney_2
  • 3
  • 3
  • 3
  • +1
11 Comments
 
LVL 92

Expert Comment

by:objects
ID: 24845875
how is what you have not working?
0
 
LVL 59

Expert Comment

by:Kevin Cross
ID: 24845922
I think you want this format "#0.000" which will have exactly 3 digits after zero always even if only have precision to tenths or hundreds place.  Additionally, will always have a digit in ones place even if value is less than one.
NumberFormatter doubleFormatter = new NumberFormatter(new DecimalFormat("#0.000"));

doubleFormatter.setAllowsInvalid(false);

numberField.setFormatterFactory(new DefaultFormatterFactory(doubleFormatter));

numberField.setColumns(10);

numberField.setValue(0.0);

Open in new window

0
 
LVL 59

Expert Comment

by:Kevin Cross
ID: 24845937
So your one error is the extra # at the end as it would be a fourth digit after decimal and if you remove one of the zeros and have # instead then numbers with less than three digits would only go out two places.  Therefore, you have to remember that 0 is used in pattern to represent a digit that will be included no matter what either as value or zero.  # are only included when have non-zero value.
0
 

Author Comment

by:gdkinney_2
ID: 24846004
The one problem with what I have is that if I have a large number like

2.23E19  in my database when the value populates my JFormattedTextField it appears as 0 for some reason.  It does not do this for smaller numbers though.
0
 
LVL 92

Expert Comment

by:objects
ID: 24846026
have you checked the value is being read from database correctly?
Are you using double or float?
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:gdkinney_2
ID: 24846146
The value is correct when it comes out of the database it goes to 0 when I attempt to use the correct value to set the text for the JFormattedTextField.  It's correct before I set the JFormattedTextField but then the textfield displays a 0 after I use the correct number and attempt to set it.  If I use a smaller number like 1.0E5 it works OK for some reason.
0
 
LVL 59

Accepted Solution

by:
Kevin Cross earned 500 total points
ID: 24846190
This works fine, so maybe try to parse the data from database into a double variable first and see if makes a difference.
JFormattedTextField numberField = new JFormattedTextField();

		NumberFormatter doubleFormatter = new NumberFormatter(new DecimalFormat("#0.000"));

		doubleFormatter.setAllowsInvalid(false);

		numberField.setFormatterFactory(new DefaultFormatterFactory(doubleFormatter));

		numberField.setColumns(10);

		numberField.setValue(2.23E19);

		JOptionPane.showMessageDialog(null, numberField.getText());

Open in new window

0
 
LVL 86

Expert Comment

by:CEHJ
ID: 24846953
It's worth trying to operate with BigDecimal - you might be running out of precision in certain cases, throwing off the format
0
 
LVL 92

Expert Comment

by:objects
ID: 24846961
double precision is fine
0
 

Author Comment

by:gdkinney_2
ID: 24849917
Actually I did get it to work I was using numberField.setText then I switched over to numberField.setValue apparently the first way was not using the Formatter correctly.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 24851267
That's good. Bear in mind that a NumberFormat will use zeros instead of the actual digits if there's a precision overflow
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Suggested Solutions

By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now