?
Solved

Need a DecimalFormat for a NumberFormatter for a JFormattedTextField

Posted on 2009-07-13
11
Medium Priority
?
337 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 3
  • +1
11 Comments
 
LVL 92

Expert Comment

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

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 60

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
Get real performance insights from real users

Key features:
- Total Pages Views and Load times
- Top Pages Viewed and Load Times
- Real Time Site Page Build Performance
- Users’ Browser and Platform Performance
- Geographic User Breakdown
- And more

 

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
 

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 60

Accepted Solution

by:
Kevin Cross earned 2000 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

Get real performance insights from real users

Key features:
- Total Pages Views and Load times
- Top Pages Viewed and Load Times
- Real Time Site Page Build Performance
- Users’ Browser and Platform Performance
- Geographic User Breakdown
- And more

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
Suggested Courses

762 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