Solved

Need a DecimalFormat for a NumberFormatter for a JFormattedTextField

Posted on 2009-07-13
11
333 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
PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

 

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 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

MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
servlet example 11 59
web application structure 18 117
import as existing maven project 3 42
JDBC performance 8 29
Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
This video teaches viewers about errors in exception handling.

696 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