Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
I am learning GoF Java Design Patterns and I want to see some real life examples of them. Can you guys point to some good usage of these Design Patterns.(preferably in Java's core libraries). Thank you
I'm using DecimalFormat to parse / validate user input. Unfortunately it allows characters as a suffix while parsing. Example code: try { final NumberFormat numberFormat = new DecimalFormat(); System.out.println(numberFormat.parse("12abc")); System.out.println(numberFormat.parse("abc12")); } catch (final ParseException e) { System.out.println("parse exception"); } Result: 12 parse ...
When and how should we use a Constructor Foo bar = new Foo(); And When and how should we use getInstance() (static factory methods) Foo bar = Foo.getInstance(); What is the difference between these two, I always use the 1st way but when to use the 2nd way?? UPDATE 1 Say, I need to implement the class too and use .getInstance() from a different class. UPDATE 2 What do you guys mean by ...
What is the easiest and correct way to convert a String number with commas (for example: 835,111.2) to a Double instance. Thanks, Rod
I want to convert some numbers which I got as strings into Doubles, but these numbers are not in US standard locale, but in a different one. How can I do that?
I have an int between 1 - 99. How do I get it to always be a double digit, ie: 01, 04, 21?
Is there a better, more elegant (and/or possibly faster) way than boolean isNumber = false; try{ Double.valueOf(myNumber); isNumber = true; } catch (NumberFormatException e) { } ...? Edit: Since I can't pick two answers I'm going with the regex one because a) it's elegant and b) saying "Jon Skeet solved the problem" is a tautology because Jon Skeet himself is the solution to all pr...
On the backend I'm storing money values in a Money class which wraps a BigDecimal and sets rounding to be always Half Even with scale 8. All basic operations work fine and behave as expected. But I need to show those values to the user with scale of 2, and that's bringing me rounding errors. For example, I have these values in the backend: a = 109.11432 b = 9015.57069 c = 9124.68501 Each one...
I have the following code to parse a String variable called str. NumberFormat formatter = NumberFormat.getInstance(); Number number = formatter.parse(str); I want to catch the Exception thrown when str is not a number just to validate it. The problem I have is that it does't always throws the ParseException expected. When the String str starts with a number but then are characters it seems ...
I'm surprised that I'm having real trouble finding how to do this. It seems to me it should be pretty straightforward. Perhaps I'm looking in the wrong place. Suppose I have the following code: double amount = 123.45D; //yes, I know that I should be using longs Locale uk = Locale.UK; Locale fr = Locale.FR; Currency euro = Currency.getInstance("EUR"); How do I get instances of NumberFormat t...
I have a text field which is bound with Integer variable, so when user enters number into this field, binding mechanism automatically converts text into Integer and sets this value into var. Problem is, since user types text into text field, that binding mechanism is converting only values, and if user types some letters into it, binding would not activate because there is no legal value inside...
How come a primitive float value can be -0.0? What does that mean? Can I cancel that feature? When I have: float fl; Then fl == -0.0 returns true and so does fl == 0. But when I print it, it prints -0.0.
I want to add the thousands separator to a variable of type double. I have tried using String.format("%,f", x); and similar, but it seems to have a fixed number of decimal places, unlike Double.toString(). For example, with the value 1234.5: Double.toString(): 1234.5 String.format(): 1.234,500000 Desired: 1.234,5
I have a question about formatting the Rupee currency (Indian Rupee - INR). Typically a value like 450500 is formatted and shown as 450,500. In India, the same value is displayed as 4,50,500 For example, numbers here are represented as: 1 10 100 1,000 10,000 1,00,000 10,00,000 1,00,00,000 10,00,00,000 Refer Indian Numbering System The separators are after two digits, except for the last s...
I was trying to make my own class for currencies using longs, but Apparently I should use BigDecimal (and then whenever I print it just add the $ sign before it). Could someone please get me started? What would be the best way to use BigDecimals for Dollar currencies, like making it at least but no more than 2 decimal places for the cents, etc. The api for BigDecimal is huge, and I don't know w...
I have a double whose value is 10,000,000.00 (ten millions). I have to convert it to a String. When using the method "toString" I am getting the String "1.0E7" which is correct following the specification. Unfortunately I need the String "10,000,000.00" (or the equivalent depending on the locale). How can achieve this? Thanks in advance, Luis
Pretty basic question I think - I'm performing this function: private double convertMetersToFeet(double meters) { //function converts Feet to Meters. double toFeet = meters; toFeet = meters*3.2808; // official conversion rate of Meters to Feet return toFeet; } Problem is the output; for example I get 337.36080000000004 from an input of 101. What's the appropriate practic...
I'm working on a J2EE application which uses Struts (v1) and I would like to format a value being displayed in a JSP. The value to be displayed is a 7 or 8 digit integer and I would like to insert dashes into it, like so: 1234567 -> 1-234-567 12345678 -> 12-345-678 What is the best way to go about this? My first thought was to write a special getter in my form bean which would return t...
I tried using Formatter.format, but that seems to leave the mantissa on numbers with 0 mantissa, whereas the C version does not. Is there an equivalent of C's %g format specifier in Java, and if not, is there a way to fake it? My intention is to preserve the mantissa exactly like C's for compatibility reasons. foo.c #include <stdio.h> int main (int argc, char const *argv[]) { print...
How to implement VB's Val() function using Java programming language or is there any API that has the same method?
Suppose I'm supplied with a String which is like "$123,456,56.25" or "123'456.67" or something similar to this (with digits and a decimal point and some seperator like , or ' or something else which is not predictable). I need to write a method which takes an argument like the one above and returns a String like "12345656.25" or "123456.67" respectively. Could you please suggest the most effi...
   /*
    * Copyright 1996-2005 Sun Microsystems, Inc.  All Rights Reserved.
    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    *
    * This code is free software; you can redistribute it and/or modify it
    * under the terms of the GNU General Public License version 2 only, as
    * published by the Free Software Foundation.  Sun designates this
    * particular file as subject to the "Classpath" exception as provided
    * by Sun in the LICENSE file that accompanied this code.
   *
   * This code is distributed in the hope that it will be useful, but WITHOUT
   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   * version 2 for more details (a copy is included in the LICENSE file that
   * accompanied this code).
   *
   * You should have received a copy of the GNU General Public License version
   * 2 along with this work; if not, write to the Free Software Foundation,
   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   *
   * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
   * CA 95054 USA or visit www.sun.com if you need additional information or
   * have any questions.
   */
  
  /*
   * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
   * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
   *
   *   The original version of this source code and documentation is copyrighted
   * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
   * materials are provided under terms of a License Agreement between Taligent
   * and Sun. This technology is protected by multiple US and International
   * patents. This notice and attribution to Taligent may not be removed.
   *   Taligent is a registered trademark of Taligent, Inc.
   *
   */
  
  package java.text;
  
  import java.util.HashMap;
  import java.util.Locale;
  import java.util.Map;
NumberFormat is the abstract base class for all number formats. This class provides the interface for formatting and parsing numbers. NumberFormat also provides methods for determining which locales have number formats, and what their names are.

NumberFormat helps you to format and parse numbers for any locale. Your code can be completely independent of the locale conventions for decimal points, thousands-separators, or even the particular decimal digits used, or whether the number format is even decimal.

To format a number for the current Locale, use one of the factory class methods:

  myString = NumberFormat.getInstance().format(myNumber);
 
If you are formatting multiple numbers, it is more efficient to get the format and use it multiple times so that the system doesn't have to fetch the information about the local language and country conventions multiple times.
 NumberFormat nf = NumberFormat.getInstance();
 for (int i = 0; i < myNumber.length; ++i) {
     output.println(nf.format(myNumber[i]) + "; ");
 }
 
To format a number for a different Locale, specify it in the call to getInstance.
 NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
 
You can also use a NumberFormat to parse numbers:
 myNumber = nf.parse(myString);
 
Use getInstance or getNumberInstance to get the normal number format. Use getIntegerInstance to get an integer number format. Use getCurrencyInstance to get the currency number format. And use getPercentInstance to get a format for displaying percentages. With this format, a fraction like 0.53 is displayed as 53%.

You can also control the display of numbers with such methods as setMinimumFractionDigits. If you want even more control over the format or parsing, or want to give your users more control, you can try casting the NumberFormat you get from the factory methods to a DecimalFormat. This will work for the vast majority of locales; just remember to put it in a try block in case you encounter an unusual one.

NumberFormat and DecimalFormat are designed such that some controls work for formatting and others work for parsing. The following is the detailed description for each these control methods,

setParseIntegerOnly : only affects parsing, e.g. if true, "3456.78" -> 3456 (and leaves the parse position just after index 6) if false, "3456.78" -> 3456.78 (and leaves the parse position just after index 8) This is independent of formatting. If you want to not show a decimal point where there might be no digits after the decimal point, use setDecimalSeparatorAlwaysShown.

setDecimalSeparatorAlwaysShown : only affects formatting, and only where there might be no digits after the decimal point, such as with a pattern like "#,##0.##", e.g., if true, 3456.00 -> "3,456." if false, 3456.00 -> "3456" This is independent of parsing. If you want parsing to stop at the decimal point, use setParseIntegerOnly.

You can also use forms of the parse and format methods with ParsePosition and FieldPosition to allow you to:

  • progressively parse through pieces of a string
  • align the decimal point and other areas
For example, you can align numbers in two ways:
  1. If you are using a monospaced font with spacing for alignment, you can pass the FieldPosition in your format call, with field = INTEGER_FIELD. On output, getEndIndex will be set to the offset between the last character of the integer and the decimal. Add (desiredSpaceCount - getEndIndex) spaces at the front of the string.
  2. If you are using proportional fonts, instead of padding with spaces, measure the width of the string in pixels from the start to getEndIndex. Then move the pen by (desiredPixelWidth - widthToAlignmentPoint) before drawing the text. It also works where there is no decimal, but possibly additional characters at the end, e.g., with parentheses in negative numbers: "(12)" for -12.

Synchronization

Number formats are generally not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.

Author(s):
Mark Davis
Helena Shih
See also:
DecimalFormat
ChoiceFormat
 
 public abstract class NumberFormat extends Format  {

    
Field constant used to construct a FieldPosition object. Signifies that the position of the integer part of a formatted number should be returned.

See also:
FieldPosition
 
     public static final int INTEGER_FIELD = 0;

    
Field constant used to construct a FieldPosition object. Signifies that the position of the fraction part of a formatted number should be returned.

See also:
FieldPosition
 
     public static final int FRACTION_FIELD = 1;

    
Sole constructor. (For invocation by subclass constructors, typically implicit.)
 
     protected NumberFormat() {
     }

    
Formats a number and appends the resulting text to the given string buffer. The number can be of any subclass of java.lang.Number.

This implementation extracts the number's value using java.lang.Number.longValue() for all integral type values that can be converted to long without loss of information, including BigInteger values with a bit length of less than 64, and java.lang.Number.doubleValue() for all other types. It then calls format(long,java.lang.StringBuffer,java.text.FieldPosition) or format(double,java.lang.StringBuffer,java.text.FieldPosition). This may result in loss of magnitude information and precision for BigInteger and BigDecimal values.

Parameters:
number the number to format
toAppendTo the StringBuffer to which the formatted text is to be appended
pos On input: an alignment field, if desired. On output: the offsets of the alignment field.
Returns:
the value passed in as toAppendTo
Throws:
java.lang.IllegalArgumentException if number is null or not an instance of Number.
java.lang.NullPointerException if toAppendTo or pos is null
java.lang.ArithmeticException if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
See also:
FieldPosition
 
     public StringBuffer format(Object number,
                                StringBuffer toAppendTo,
                                FieldPosition pos) {
         if (number instanceof Long || number instanceof Integer ||
             number instanceof Short || number instanceof Byte ||
             number instanceof AtomicInteger || number instanceof AtomicLong ||
             (number instanceof BigInteger &&
              ((BigInteger)number).bitLength() < 64)) {
             return format(((Number)number).longValue(), toAppendTopos);
         } else if (number instanceof Number) {
             return format(((Number)number).doubleValue(), toAppendTopos);
         } else {
             throw new IllegalArgumentException("Cannot format given Object as a Number");
         }
     }

    
Parses text from a string to produce a Number.

The method attempts to parse text starting at the index given by pos. If parsing succeeds, then the index of pos is updated to the index after the last character used (parsing does not necessarily use all characters up to the end of the string), and the parsed number is returned. The updated pos can be used to indicate the starting point for the next call to this method. If an error occurs, then the index of pos is not changed, the error index of pos is set to the index of the character where the error occurred, and null is returned.

See the parse(java.lang.String,java.text.ParsePosition) method for more information on number parsing.

Parameters:
source A String, part of which should be parsed.
pos A ParsePosition object with index and error index information as described above.
Returns:
A Number parsed from the string. In case of error, returns null.
Throws:
java.lang.NullPointerException if pos is null.
 
     public final Object parseObject(String sourceParsePosition pos) {
         return parse(sourcepos);
     }

   
Specialization of format.

Throws:
java.lang.ArithmeticException if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
See also:
Format.format(java.lang.Object)
 
     public final String format(double number) {
         return format(numbernew StringBuffer(),
                       .).toString();
     }

   
Specialization of format.

Throws:
java.lang.ArithmeticException if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
See also:
Format.format(java.lang.Object)
 
     public final String format(long number) {
         return format(numbernew StringBuffer(),
                       .).toString();
     }

   
Specialization of format.

Throws:
java.lang.ArithmeticException if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
See also:
Format.format(java.lang.Object)
 
     public abstract StringBuffer format(double number,
                                         StringBuffer toAppendTo,
                                         FieldPosition pos);

   
Specialization of format.

Throws:
java.lang.ArithmeticException if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
See also:
Format.format(java.lang.Object)
 
     public abstract StringBuffer format(long number,
                                         StringBuffer toAppendTo,
                                         FieldPosition pos);

   
Returns a Long if possible (e.g., within the range [Long.MIN_VALUE, Long.MAX_VALUE] and with no decimals), otherwise a Double. If IntegerOnly is set, will stop at a decimal point (or equivalent; e.g., for rational numbers "1 2/3", will stop after the 1). Does not throw an exception; if no object can be parsed, index is unchanged!

 
     public abstract Number parse(String sourceParsePosition parsePosition);

    
Parses text from the beginning of the given string to produce a number. The method may not use the entire text of the given string.

See the parse(java.lang.String,java.text.ParsePosition) method for more information on number parsing.

Parameters:
source A String whose beginning should be parsed.
Returns:
A Number parsed from the string.
Throws:
ParseException if the beginning of the specified string cannot be parsed.
 
     public Number parse(String sourcethrows ParseException {
         ParsePosition parsePosition = new ParsePosition(0);
         Number result = parse(sourceparsePosition);
         if (parsePosition.index == 0) {
             throw new ParseException("Unparseable number: \"" + source + "\"",
                                      parsePosition.errorIndex);
         }
         return result;
     }

    
Returns true if this format will parse numbers as integers only. For example in the English locale, with ParseIntegerOnly true, the string "1234." would be parsed as the integer value 1234 and parsing would stop at the "." character. Of course, the exact format accepted by the parse operation is locale dependant and determined by sub-classes of NumberFormat.
 
     public boolean isParseIntegerOnly() {
         return ;
     }

    
Sets whether or not numbers should be parsed as integers only.

 
     public void setParseIntegerOnly(boolean value) {
          = value;
     }
 
     //============== Locale Stuff =====================
 
    
Returns a general-purpose number format for the current default locale. This is the same as calling getNumberInstance().
 
     public final static NumberFormat getInstance() {
         return getInstance(Locale.getDefault(), );
     }

    
Returns a general-purpose number format for the specified locale. This is the same as calling getNumberInstance(inLocale).
 
     public static NumberFormat getInstance(Locale inLocale) {
         return getInstance(inLocale);
     }

    
Returns a general-purpose number format for the current default locale.
 
     public final static NumberFormat getNumberInstance() {
         return getInstance(Locale.getDefault(), );
     }

    
Returns a general-purpose number format for the specified locale.
 
     public static NumberFormat getNumberInstance(Locale inLocale) {
         return getInstance(inLocale);
     }

    
Returns an integer number format for the current default locale. The returned number format is configured to round floating point numbers to the nearest integer using half-even rounding (see java.math.RoundingMode.HALF_EVEN) for formatting, and to parse only the integer part of an input string (see isParseIntegerOnly()).

Returns:
a number format for integer values
Since:
1.4
See also:
getRoundingMode()
 
     public final static NumberFormat getIntegerInstance() {
         return getInstance(Locale.getDefault(), );
     }

    
Returns an integer number format for the specified locale. The returned number format is configured to round floating point numbers to the nearest integer using half-even rounding (see java.math.RoundingMode.HALF_EVEN) for formatting, and to parse only the integer part of an input string (see isParseIntegerOnly()).

Returns:
a number format for integer values
Since:
1.4
See also:
getRoundingMode()
 
     public static NumberFormat getIntegerInstance(Locale inLocale) {
         return getInstance(inLocale);
     }

    
Returns a currency format for the current default locale.
 
     public final static NumberFormat getCurrencyInstance() {
         return getInstance(Locale.getDefault(), );
     }

    
Returns a currency format for the specified locale.
 
     public static NumberFormat getCurrencyInstance(Locale inLocale) {
         return getInstance(inLocale);
     }

    
Returns a percentage format for the current default locale.
 
     public final static NumberFormat getPercentInstance() {
         return getInstance(Locale.getDefault(), );
     }

    
Returns a percentage format for the specified locale.
 
     public static NumberFormat getPercentInstance(Locale inLocale) {
         return getInstance(inLocale);
     }

    
Returns a scientific format for the current default locale.
 
     /*public*/ final static NumberFormat getScientificInstance() {
         return getInstance(Locale.getDefault(), );
     }

    
Returns a scientific format for the specified locale.
 
     /*public*/ static NumberFormat getScientificInstance(Locale inLocale) {
         return getInstance(inLocale);
     }

    
Returns an array of all locales for which the get*Instance methods of this class can return localized instances. The returned array represents the union of locales supported by the Java runtime and by installed NumberFormatProvider implementations. It must contain at least a Locale instance equal to Locale.US.

Returns:
An array of locales for which localized NumberFormat instances are available.
 
     public static Locale[] getAvailableLocales() {
         LocaleServiceProviderPool pool =
             LocaleServiceProviderPool.getPool(NumberFormatProvider.class);
         return pool.getAvailableLocales();
     }

    
Overrides hashCode
 
     public int hashCode() {
         return  * 37 + ;
         // just enough fields for a reasonable distribution
     }

    
Overrides equals
 
     public boolean equals(Object obj) {
         if (obj == null) {
             return false;
         }
         if (this == obj) {
             return true;
         }
         if (getClass() != obj.getClass()) {
             return false;
         }
         NumberFormat other = (NumberFormatobj;
         return ( == other.maximumIntegerDigits
             &&  == other.minimumIntegerDigits
             &&  == other.maximumFractionDigits
             &&  == other.minimumFractionDigits
             &&  == other.groupingUsed
             &&  == other.parseIntegerOnly);
     }

    
Overrides Cloneable
 
     public Object clone() {
         NumberFormat other = (NumberFormatsuper.clone();
         return other;
     }

    
Returns true if grouping is used in this format. For example, in the English locale, with grouping on, the number 1234567 might be formatted as "1,234,567". The grouping separator as well as the size of each group is locale dependant and is determined by sub-classes of NumberFormat.

 
     public boolean isGroupingUsed() {
         return ;
     }

    
Set whether or not grouping will be used in this format.

 
     public void setGroupingUsed(boolean newValue) {
          = newValue;
     }

    
Returns the maximum number of digits allowed in the integer portion of a number.

 
     public int getMaximumIntegerDigits() {
         return ;
     }

    
Sets the maximum number of digits allowed in the integer portion of a number. maximumIntegerDigits must be >= minimumIntegerDigits. If the new value for maximumIntegerDigits is less than the current value of minimumIntegerDigits, then minimumIntegerDigits will also be set to the new value.

Parameters:
newValue the maximum number of integer digits to be shown; if less than zero, then zero is used. The concrete subclass may enforce an upper limit to this value appropriate to the numeric type being formatted.
See also:
getMaximumIntegerDigits()
 
     public void setMaximumIntegerDigits(int newValue) {
          = Math.max(0,newValue);
         if ( > ) {
              = ;
         }
     }

    
Returns the minimum number of digits allowed in the integer portion of a number.

 
     public int getMinimumIntegerDigits() {
         return ;
     }

    
Sets the minimum number of digits allowed in the integer portion of a number. minimumIntegerDigits must be <= maximumIntegerDigits. If the new value for minimumIntegerDigits exceeds the current value of maximumIntegerDigits, then maximumIntegerDigits will also be set to the new value

Parameters:
newValue the minimum number of integer digits to be shown; if less than zero, then zero is used. The concrete subclass may enforce an upper limit to this value appropriate to the numeric type being formatted.
See also:
getMinimumIntegerDigits()
 
     public void setMinimumIntegerDigits(int newValue) {
          = Math.max(0,newValue);
         if ( > ) {
              = ;
         }
     }

    
Returns the maximum number of digits allowed in the fraction portion of a number.

 
     public int getMaximumFractionDigits() {
         return ;
     }

    
Sets the maximum number of digits allowed in the fraction portion of a number. maximumFractionDigits must be >= minimumFractionDigits. If the new value for maximumFractionDigits is less than the current value of minimumFractionDigits, then minimumFractionDigits will also be set to the new value.

Parameters:
newValue the maximum number of fraction digits to be shown; if less than zero, then zero is used. The concrete subclass may enforce an upper limit to this value appropriate to the numeric type being formatted.
See also:
getMaximumFractionDigits()
 
     public void setMaximumFractionDigits(int newValue) {
          = Math.max(0,newValue);
         if ( < ) {
              = ;
         }
     }

    
Returns the minimum number of digits allowed in the fraction portion of a number.

 
     public int getMinimumFractionDigits() {
         return ;
     }

    
Sets the minimum number of digits allowed in the fraction portion of a number. minimumFractionDigits must be <= maximumFractionDigits. If the new value for minimumFractionDigits exceeds the current value of maximumFractionDigits, then maximumIntegerDigits will also be set to the new value

Parameters:
newValue the minimum number of fraction digits to be shown; if less than zero, then zero is used. The concrete subclass may enforce an upper limit to this value appropriate to the numeric type being formatted.
See also:
getMinimumFractionDigits()
 
     public void setMinimumFractionDigits(int newValue) {
          = Math.max(0,newValue);
         if ( < ) {
              = ;
         }
     }

    
Gets the currency used by this number format when formatting currency values. The initial value is derived in a locale dependent way. The returned value may be null if no valid currency could be determined and no currency has been set using setCurrency.

The default implementation throws UnsupportedOperationException.

Returns:
the currency used by this number format, or null
Throws:
java.lang.UnsupportedOperationException if the number format class doesn't implement currency formatting
Since:
1.4
 
     public Currency getCurrency() {
         throw new UnsupportedOperationException();
     }

    
Sets the currency used by this number format when formatting currency values. This does not update the minimum or maximum number of fraction digits used by the number format.

The default implementation throws UnsupportedOperationException.

Parameters:
currency the new currency to be used by this number format
Throws:
java.lang.UnsupportedOperationException if the number format class doesn't implement currency formatting
java.lang.NullPointerException if currency is null
Since:
1.4
 
     public void setCurrency(Currency currency) {
         throw new UnsupportedOperationException();
     }

    
Gets the java.math.RoundingMode used in this NumberFormat. The default implementation of this method in NumberFormat always throws java.lang.UnsupportedOperationException. Subclasses which handle different rounding modes should override this method.

Returns:
The RoundingMode used for this NumberFormat.
Throws:
java.lang.UnsupportedOperationException The default implementation always throws this exception
Since:
1.6
See also:
setRoundingMode(java.math.RoundingMode)
 
     public RoundingMode getRoundingMode() {
         throw new UnsupportedOperationException();
     }

    
Sets the java.math.RoundingMode used in this NumberFormat. The default implementation of this method in NumberFormat always throws java.lang.UnsupportedOperationException. Subclasses which handle different rounding modes should override this method.

Parameters:
roundingMode The RoundingMode to be used
Throws:
java.lang.UnsupportedOperationException The default implementation always throws this exception
java.lang.NullPointerException if roundingMode is null
Since:
1.6
See also:
getRoundingMode()
 
     public void setRoundingMode(RoundingMode roundingMode) {
         throw new UnsupportedOperationException();
     }
 
     // =======================privates===============================
 
     private static NumberFormat getInstance(Locale desiredLocale,
                                            int choice) {
         // Check whether a provider can provide an implementation that's closer
         // to the requested locale than what the Java runtime itself can provide.
         LocaleServiceProviderPool pool =
             LocaleServiceProviderPool.getPool(NumberFormatProvider.class);
         if (pool.hasProviders()) {
             NumberFormat providersInstance = pool.getLocalizedObject(
                                     .,
                                     desiredLocale,
                                     choice);
             if (providersInstance != null) {
                 return providersInstance;
             }
         }
 
         /* try the cache first */
         String[] numberPatterns = (String[]).get(desiredLocale);
         if (numberPatterns == null) { /* cache miss */
             ResourceBundle resource = LocaleData.getNumberFormatData(desiredLocale);
             numberPatterns = resource.getStringArray("NumberPatterns");
             /* update cache */
             .put(desiredLocalenumberPatterns);
         }
 
         DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(desiredLocale);
         int entry = (choice == ) ?  : choice;
         DecimalFormat format = new DecimalFormat(numberPatterns[entry], symbols);
 
         if (choice == ) {
             format.setMaximumFractionDigits(0);
             format.setDecimalSeparatorAlwaysShown(false);
             format.setParseIntegerOnly(true);
         } else if (choice == ) {
             format.adjustForCurrencyDefaultFractionDigits();
         }
 
         return format;
     }

    
First, read in the default serializable data. Then, if serialVersionOnStream is less than 1, indicating that the stream was written by JDK 1.1, set the int fields such as maximumIntegerDigits to be equal to the byte fields such as maxIntegerDigits, since the int fields were not present in JDK 1.1. Finally, set serialVersionOnStream back to the maximum allowed value so that default serialization will work properly if this object is streamed out again.

If minimumIntegerDigits is greater than maximumIntegerDigits or minimumFractionDigits is greater than maximumFractionDigits, then the stream data is invalid and this method throws an InvalidObjectException. In addition, if any of these values is negative, then this method throws an InvalidObjectException.

Since:
1.2
 
     private void readObject(ObjectInputStream stream)
          throws IOExceptionClassNotFoundException
     {
         stream.defaultReadObject();
         if ( < 1) {
             // Didn't have additional int fields, reassign to use them.
              = ;
              = ;
              = ;
              = ;
         }
         if ( >  ||
              >  ||
              < 0 ||  < 0) {
             throw new InvalidObjectException("Digit count range invalid");
         }
     }

    
Write out the default serializable data, after first setting the byte fields such as maxIntegerDigits to be equal to the int fields such as maximumIntegerDigits (or to Byte.MAX_VALUE, whichever is smaller), for compatibility with the JDK 1.1 version of the stream format.

Since:
1.2
 
     private void writeObject(ObjectOutputStream stream)
          throws IOException
     {
                            . : (byte);
                            . : (byte);
                             . : (byte);
                             . : (byte);
         stream.defaultWriteObject();
     }

    
Cache to hold the NumberPatterns of a Locale.
 
     private static final Hashtable cachedLocaleData = new Hashtable(3);
 
     // Constants used by factory methods to specify a style of format.
     private static final int NUMBERSTYLE = 0;
     private static final int CURRENCYSTYLE = 1;
     private static final int PERCENTSTYLE = 2;
     private static final int SCIENTIFICSTYLE = 3;
     private static final int INTEGERSTYLE = 4;

    
True if the grouping (i.e. thousands) separator is used when formatting and parsing numbers.

See also:
isGroupingUsed()
Serial:
 
     private boolean groupingUsed = true;

    
The maximum number of digits allowed in the integer portion of a number. maxIntegerDigits must be greater than or equal to minIntegerDigits.

Note: This field exists only for serialization compatibility with JDK 1.1. In Java platform 2 v1.2 and higher, the new int field maximumIntegerDigits is used instead. When writing to a stream, maxIntegerDigits is set to maximumIntegerDigits or Byte.MAX_VALUE, whichever is smaller. When reading from a stream, this field is used only if serialVersionOnStream is less than 1.

See also:
getMaximumIntegerDigits()
Serial:
 
     private byte    maxIntegerDigits = 40;

    
The minimum number of digits allowed in the integer portion of a number. minimumIntegerDigits must be less than or equal to maximumIntegerDigits.

Note: This field exists only for serialization compatibility with JDK 1.1. In Java platform 2 v1.2 and higher, the new int field minimumIntegerDigits is used instead. When writing to a stream, minIntegerDigits is set to minimumIntegerDigits or Byte.MAX_VALUE, whichever is smaller. When reading from a stream, this field is used only if serialVersionOnStream is less than 1.

See also:
getMinimumIntegerDigits()
Serial:
 
     private byte    minIntegerDigits = 1;

    
The maximum number of digits allowed in the fractional portion of a number. maximumFractionDigits must be greater than or equal to minimumFractionDigits.

Note: This field exists only for serialization compatibility with JDK 1.1. In Java platform 2 v1.2 and higher, the new int field maximumFractionDigits is used instead. When writing to a stream, maxFractionDigits is set to maximumFractionDigits or Byte.MAX_VALUE, whichever is smaller. When reading from a stream, this field is used only if serialVersionOnStream is less than 1.

 
     private byte    maxFractionDigits = 3;    // invariant, >= minFractionDigits
 
    
The minimum number of digits allowed in the fractional portion of a number. minimumFractionDigits must be less than or equal to maximumFractionDigits.

Note: This field exists only for serialization compatibility with JDK 1.1. In Java platform 2 v1.2 and higher, the new int field minimumFractionDigits is used instead. When writing to a stream, minFractionDigits is set to minimumFractionDigits or Byte.MAX_VALUE, whichever is smaller. When reading from a stream, this field is used only if serialVersionOnStream is less than 1.

 
     private byte    minFractionDigits = 0;

    
True if this format will parse numbers as integers only.

See also:
isParseIntegerOnly()
Serial:
 
     private boolean parseIntegerOnly = false;
 
     // new fields for 1.2.  byte is too small for integer digits.
 
    
The maximum number of digits allowed in the integer portion of a number. maximumIntegerDigits must be greater than or equal to minimumIntegerDigits.

Since:
1.2
See also:
getMaximumIntegerDigits()
Serial:
 
     private int    maximumIntegerDigits = 40;

    
The minimum number of digits allowed in the integer portion of a number. minimumIntegerDigits must be less than or equal to maximumIntegerDigits.

Since:
1.2
See also:
getMinimumIntegerDigits()
Serial:
 
     private int    minimumIntegerDigits = 1;

    
The maximum number of digits allowed in the fractional portion of a number. maximumFractionDigits must be greater than or equal to minimumFractionDigits.

Since:
1.2
See also:
getMaximumFractionDigits()
Serial:
 
     private int    maximumFractionDigits = 3;    // invariant, >= minFractionDigits
 
    
The minimum number of digits allowed in the fractional portion of a number. minimumFractionDigits must be less than or equal to maximumFractionDigits.

Since:
1.2
See also:
getMinimumFractionDigits()
Serial:
 
     private int    minimumFractionDigits = 0;
 
     static final int currentSerialVersion = 1;

    
Describes the version of NumberFormat present on the stream. Possible values are:
  • 0 (or uninitialized): the JDK 1.1 version of the stream format. In this version, the int fields such as maximumIntegerDigits were not present, and the byte fields such as maxIntegerDigits are used instead.
  • 1: the 1.2 version of the stream format. The values of the byte fields such as maxIntegerDigits are ignored, and the int fields such as maximumIntegerDigits are used instead.
When streaming out a NumberFormat, the most recent format (corresponding to the highest allowable serialVersionOnStream) is always written.

Since:
1.2
Serial:
    // Removed "implements Cloneable" clause.  Needs to update serialization
    // ID for backward compatibility.
    static final long serialVersionUID = -2308460125733713944L;
    //
    // class for AttributedCharacterIterator attributes
    //
    
Defines constants that are used as attribute keys in the AttributedCharacterIterator returned from NumberFormat.formatToCharacterIterator and as field identifiers in FieldPosition.

Since:
1.4
    public static class Field extends Format.Field {
        // Proclaim serial compatibility with 1.4 FCS
        private static final long serialVersionUID = 7494728892700160890L;
        // table of all instances in this class, used by readResolve
        private static final Map instanceMap = new HashMap(11);

        
Creates a Field instance with the specified name.

Parameters:
name Name of the attribute
        protected Field(String name) {
            super(name);
            if (this.getClass() == NumberFormat.Field.class) {
                .put(namethis);
            }
        }

        
Resolves instances being deserialized to the predefined constants.

Returns:
resolved NumberFormat.Field constant
Throws:
java.io.InvalidObjectException if the constant could not be resolved.
        protected Object readResolve() throws InvalidObjectException {
            if (this.getClass() != NumberFormat.Field.class) {
                throw new InvalidObjectException("subclass didn't correctly implement readResolve");
            }
            Object instance = .get(getName());
            if (instance != null) {
                return instance;
            } else {
                throw new InvalidObjectException("unknown attribute name");
            }
        }

        
Constant identifying the integer field.
        public static final Field INTEGER = new Field("integer");

        
Constant identifying the fraction field.
        public static final Field FRACTION = new Field("fraction");

        
Constant identifying the exponent field.
        public static final Field EXPONENT = new Field("exponent");

        
Constant identifying the decimal separator field.
        public static final Field DECIMAL_SEPARATOR =
                            new Field("decimal separator");

        
Constant identifying the sign field.
        public static final Field SIGN = new Field("sign");

        
Constant identifying the grouping separator field.
        public static final Field GROUPING_SEPARATOR =
                            new Field("grouping separator");

        
Constant identifying the exponent symbol field.
        public static final Field EXPONENT_SYMBOL = new
                            Field("exponent symbol");

        
Constant identifying the percent field.
        public static final Field PERCENT = new Field("percent");

        
Constant identifying the permille field.
        public static final Field PERMILLE = new Field("per mille");

        
Constant identifying the currency field.
        public static final Field CURRENCY = new Field("currency");

        
Constant identifying the exponent sign field.
        public static final Field EXPONENT_SIGN = new Field("exponent sign");
    }

    
Obtains a NumberFormat instance from a NumberFormatProvider implementation.
    private static class NumberFormatGetter
                                                                   NumberFormat> {
        private static final NumberFormatGetter INSTANCE = new NumberFormatGetter();
        public NumberFormat getObject(NumberFormatProvider numberFormatProvider,
                                Locale locale,
                                String key,
                                Object... params) {
            assert params.length == 1;
            int choice = (Integer)params[0];
            switch (choice) {
            case :
                return numberFormatProvider.getNumberInstance(locale);
            case :
                return numberFormatProvider.getPercentInstance(locale);
            case :
                return numberFormatProvider.getCurrencyInstance(locale);
            case :
                return numberFormatProvider.getIntegerInstance(locale);
            default:
                assert false : choice;
            }
            return null;
        }
    }
New to GrepCode? Check out our FAQ X