NumberFormat.java revision 705462a2b003b2eeed90bf3cebe0871e02554cbd
1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.text; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughesimport com.ibm.icu4jni.util.ICU; 217365de1056414750d0a7d1fdd26025fd247f0d04Jesse Wilsonimport com.ibm.icu4jni.util.LocaleData; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InvalidObjectException; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectInputStream; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectOutputStream; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectStreamField; 27d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughesimport java.math.BigInteger; 2842db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughesimport java.math.RoundingMode; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Currency; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Locale; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The abstract base class for all number formats. This class provides the 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * interface for formatting and parsing numbers. {@code NumberFormat} also 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * provides methods for determining which locales have number formats, and what 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * their names are. 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code NumberFormat} helps you to format and parse numbers for any locale. 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Your code can be completely independent of the locale conventions for decimal 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * points, thousands-separators, or even the particular decimal digits used, or 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * whether the number format is even decimal. 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * To format a number for the current locale, use one of the factory class 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods: 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 469b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * myString = NumberFormat.getInstance().format(myNumber); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 509b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If you are formatting multiple numbers, it is more efficient to get the 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format and use it multiple times so that the system doesn't have to fetch the 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * information about the local language and country conventions multiple times. 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 579b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NumberFormat nf = NumberFormat.getInstance(); 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for (int i = 0; i < a.length; ++i) { 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * output.println(nf.format(myNumber[i]) + "; "); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 649b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * To format a number for a different locale, specify it in the call to 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getInstance}. 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 709b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 749b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You can also use a {@code NumberFormat} to parse numbers: 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 799b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * myNumber = nf.parse(myString); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 839b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 85705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * 86705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * <p>Use {@code #getInstance} or {@code #getNumberInstance} to get the default number 87705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * format. Use {@link #getIntegerInstance} to get an integer number format, 88705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * {@link #getCurrencyInstance} to get the currency number format, and 89705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * {@link #getPercentInstance} to get a format for displaying percentages. 90705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * 91705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * <p>You can also control the display of numbers with methods such as 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code setMinimumFractionDigits}. If you want even more control over the 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format or parsing, or want to give your users more control, you can try 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * casting the {@code NumberFormat} you get from the factory methods to a 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DecimalFormat}. This will work for the vast majority of locales; just 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * remember to put it in a {@code try} block in case you encounter an unusual 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one. 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code NumberFormat} is designed such that some controls work for formatting 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and others work for parsing. For example, {@code setParseIntegerOnly} only 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * affects parsing: If set to {@code true}, "3456.78" is parsed as 3456 (and 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * leaves the parse position just after '6'); if set to {@code false}, 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "3456.78" is parsed as 3456.78 (and leaves the parse position just after 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * '8'). This is independent of formatting. 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You can also use forms of the {@code parse} and {@code format} methods with 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code ParsePosition} and {@code FieldPosition} to allow you to: 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>progressively parse through pieces of a string;</li> 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>align the decimal point and other areas.</li> 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * For example, you can align numbers in two ways: 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ol> 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li> If you are using a monospaced font with spacing for alignment, you can 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * pass the {@code FieldPosition} in your format call, with {@code field} = 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code INTEGER_FIELD}. On output, {@code getEndIndex} will be set to the 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * offset between the last character of the integer and the decimal. Add 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (desiredSpaceCount - getEndIndex) spaces to the front of the string.</li> 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li> If you are using proportional fonts, instead of padding with spaces, 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * measure the width of the string in pixels from the start to 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getEndIndex}. Then move the pen by (desiredPixelWidth - 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * widthToAlignmentPoint) before drawing the text. This also works where there 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is no decimal but possibly additional characters before or after the number, 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for example with parentheses in negative numbers: "(12)" for -12.</li> 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ol> 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Synchronization</h4> 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Number formats are generally not synchronized. It is recommended to create 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * separate format instances for each thread. If multiple threads access a 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format concurrently, it must be synchronized externally. 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>DecimalFormat</h4> 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DecimalFormat} is the concrete implementation of {@code NumberFormat}, 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and the {@code NumberFormat} API is essentially an abstraction of 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DecimalFormat's} API. Refer to {@code DecimalFormat} for more 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * information about this API. 1389b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see DecimalFormat 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.text.ChoiceFormat 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class NumberFormat extends Format { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = -2308460125733713944L; 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field constant identifying the integer part of a number. 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int INTEGER_FIELD = 0; 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field constant identifying the fractional part of a number. 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int FRACTION_FIELD = 1; 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean groupingUsed = true, parseIntegerOnly = false; 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int maximumIntegerDigits = 40, minimumIntegerDigits = 1, 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumFractionDigits = 3, minimumFractionDigits = 0; 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 16242db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Used by subclasses. This was public in Java 5. 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16442db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes protected NumberFormat() { 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a new {@code NumberFormat} with the same properties as this 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code NumberFormat}. 170f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a shallow copy of this {@code NumberFormat}. 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.lang.Cloneable 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.clone(); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the specified object to this number format and indicates if 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * they are equal. In order to be equal, {@code object} must be an instance 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of {@code NumberFormat} with the same pattern and properties. 183f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare with this object. 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the specified object is equal to this number 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format; {@code false} otherwise. 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #hashCode 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object object) { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object == this) { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(object instanceof NumberFormat)) { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NumberFormat obj = (NumberFormat) object; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return groupingUsed == obj.groupingUsed 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && parseIntegerOnly == obj.parseIntegerOnly 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && maximumFractionDigits == obj.maximumFractionDigits 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && maximumIntegerDigits == obj.maximumIntegerDigits 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && minimumFractionDigits == obj.minimumFractionDigits 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && minimumIntegerDigits == obj.minimumIntegerDigits; 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified double using the rules of this number format. 209f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the double to format. 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the formatted string. 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final String format(double value) { 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return format(value, new StringBuffer(), new FieldPosition(0)) 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .toString(); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified double value as a string using the pattern of this 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number format and appends the string to the specified string buffer. 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the {@code field} member of {@code position} contains a value 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specifying a format field, then its {@code beginIndex} and 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code endIndex} members will be updated with the position of the first 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * occurrence of this field in the formatted text. 2279b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the double to format. 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buffer 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target string buffer to append the formatted double value 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to. 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on input: an optional alignment field; on output: the offsets 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the alignment field in the formatted text. 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string buffer. 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 238d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes public abstract StringBuffer format(double value, StringBuffer buffer, FieldPosition field); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified long using the rules of this number format. 242f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to format. 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the formatted string. 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final String format(long value) { 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return format(value, new StringBuffer(), new FieldPosition(0)) 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .toString(); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified long value as a string using the pattern of this 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number format and appends the string to the specified string buffer. 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the {@code field} member of {@code position} contains a value 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specifying a format field, then its {@code beginIndex} and 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code endIndex} members will be updated with the position of the first 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * occurrence of this field in the formatted text. 2609b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to format. 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buffer 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target string buffer to append the formatted long value 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to. 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on input: an optional alignment field; on output: the offsets 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the alignment field in the formatted text. 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string buffer. 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 271d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes public abstract StringBuffer format(long value, StringBuffer buffer, FieldPosition field); 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 274d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * Formats a number into a supplied buffer. 275d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * <p> 276d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * The number must be a subclass of {@code Number}. Instances of {@code Byte}, {@code Short}, 277d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * {@code Integer}, and {@code Long} have {@code Number.longValue} invoked, as do instances of 278d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * {@code BigInteger} where {@code BigInteger.bitLength} returns <i>less than</i> 64. All other 279d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * values have {@code Number.doubleValue} invoked instead. 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the {@code field} member of {@code field} contains a value specifying 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a format field, then its {@code beginIndex} and {@code endIndex} members 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will be updated with the position of the first occurrence of this field 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the formatted text. 2859b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to format, must be a {@code Number}. 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buffer 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target string buffer to append the formatted number to. 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on input: an optional alignment field; on output: the offsets 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the alignment field in the formatted text. 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string buffer. 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code object} is not an instance of {@code Number}. 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 298d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes public StringBuffer format(Object object, StringBuffer buffer, FieldPosition field) { 299d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes if (object instanceof Byte || object instanceof Short || object instanceof Integer || 300d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes object instanceof Long || 301d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes (object instanceof BigInteger && ((BigInteger) object).bitLength() < 64)) { 302a1e5d8a2c1594f7a6ed8aca6e82b106ec8ce79d6Elliott Hughes long lv = ((Number) object).longValue(); 303a1e5d8a2c1594f7a6ed8aca6e82b106ec8ce79d6Elliott Hughes return format(lv, buffer, field); 304d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes } else if (object instanceof Number) { 305d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes double dv = ((Number) object).doubleValue(); 306d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes return format(dv, buffer, field); 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(); 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 31293f0d794f264baeb7a90d02e58cae60305b3912aElliott Hughes * Returns an array of locales for which custom {@code NumberFormat} instances 31393f0d794f264baeb7a90d02e58cae60305b3912aElliott Hughes * are available. 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Locale[] getAvailableLocales() { 316757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return ICU.getAvailableNumberFormatLocales(); 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the currency used by this number format. 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This implementation throws {@code UnsupportedOperationException}, 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * concrete subclasses should override this method if they support currency 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 326f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the currency that was set in getInstance() or in setCurrency(), 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or {@code null}. 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedOperationException 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Currency getCurrency() { 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnsupportedOperationException(); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing currency values 3373106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * for the user's default locale. 3383106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 339f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling currency values. 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static NumberFormat getCurrencyInstance() { 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getCurrencyInstance(Locale.getDefault()); 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing currency values 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for the specified locale. 349f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale to use. 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling currency values. 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getCurrencyInstance(Locale locale) { 355757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return getInstance(LocaleData.get(locale).currencyPattern, locale); 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing integers for the 3603106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * user's default locale. 3613106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 362f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling integers. 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static NumberFormat getIntegerInstance() { 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getIntegerInstance(Locale.getDefault()); 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing integers for 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified locale. 372f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale to use. 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling integers. 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getIntegerInstance(Locale locale) { 378757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes NumberFormat result = getInstance(LocaleData.get(locale).integerPattern, locale); 37933aa6eb602478e7f51ac16f30c88db3566022886Elliott Hughes result.setParseIntegerOnly(true); 38033aa6eb602478e7f51ac16f30c88db3566022886Elliott Hughes return result; 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing numbers for the 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * default locale. 386f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling {@code Number} objects. 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static NumberFormat getInstance() { 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getNumberInstance(); 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing numbers for the 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified locale. 396f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale to use. 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling {@code Number} objects. 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getInstance(Locale locale) { 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getNumberInstance(locale); 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 4059b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson // BEGIN android-added 406a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes private static NumberFormat getInstance(String pattern, Locale locale) { 407a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes return new DecimalFormat(pattern, locale); 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 4099b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson // END android-added 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the maximum number of fraction digits that are printed when 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. If the maximum is less than the number of fraction digits, 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the least significant digits are truncated. 415f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the maximum number of fraction digits. 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMaximumFractionDigits() { 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return maximumFractionDigits; 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the maximum number of integer digits that are printed when 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. If the maximum is less than the number of integer digits, the 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * most significant digits are truncated. 426f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the maximum number of integer digits. 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMaximumIntegerDigits() { 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return maximumIntegerDigits; 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the minimum number of fraction digits that are printed when 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 436f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the minimum number of fraction digits. 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMinimumFractionDigits() { 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return minimumFractionDigits; 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the minimum number of integer digits that are printed when 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 446f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the minimum number of integer digits. 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMinimumIntegerDigits() { 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return minimumIntegerDigits; 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing numbers for the 4553106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * user's default locale. 4563106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 457f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling {@code Number} objects. 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static NumberFormat getNumberInstance() { 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getNumberInstance(Locale.getDefault()); 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing numbers for the 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified locale. 467f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale to use. 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling {@code Number} objects. 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getNumberInstance(Locale locale) { 473757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return getInstance(LocaleData.get(locale).numberPattern, locale); 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing percentage 4783106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * values for the user's default locale. 4793106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 480f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 481705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * <p>The {@code NumberFormat} returned by this method should only be used 482705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * to format floating-point numbers typically between 0 and 1 (with 1 being 100%). 483705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * A value such as 0.53 will be treated as 53%, but 53.0 (or the integer 53) will be 484705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * treated as 5,300%, which is rarely what you intended. 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static NumberFormat getPercentInstance() { 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getPercentInstance(Locale.getDefault()); 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing percentage 492705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * values for the given {@code locale}. 493f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 494705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * <p>The {@code NumberFormat} returned by this method should only be used 495705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * to format floating-point numbers typically between 0 and 1 (with 1 being 100%). 496705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * A value such as 0.53 will be treated as 53%, but 53.0 (or the integer 53) will be 497705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * treated as 5,300%, which is rarely what you intended. 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getPercentInstance(Locale locale) { 500757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return getInstance(LocaleData.get(locale).percentPattern, locale); 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (groupingUsed ? 1231 : 1237) + (parseIntegerOnly ? 1231 : 1237) 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + maximumFractionDigits + maximumIntegerDigits 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + minimumFractionDigits + minimumIntegerDigits; 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether this number format formats and parses numbers using a 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * grouping separator. 513f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if a grouping separator is used; {@code false} 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isGroupingUsed() { 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return groupingUsed; 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether this number format only parses integer numbers. Parsing 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stops if a decimal separator is encountered. 524f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this number format only parses integers, 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} if if parsese integers as well as fractions. 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isParseIntegerOnly() { 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parseIntegerOnly; 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses a {@code Number} from the specified string using the rules of this 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number format. 535f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to parse. 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code Number} resulting from the parsing. 5399b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws ParseException 5409b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if an error occurs during parsing. 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Number parse(String string) throws ParseException { 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ParsePosition pos = new ParsePosition(0); 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Number number = parse(string, pos); 545fe1eba10c5d69e115dfab55d82cc22d42e9fbae5Elliott Hughes if (pos.getIndex() == 0) { 54603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new ParseException("Unparseable number" + string, pos.getErrorIndex()); 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return number; 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses a {@code Number} from the specified string starting at the index 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified by {@code position}. If the string is successfully parsed then 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index of the {@code ParsePosition} is updated to the index following 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parsed text. On error, the index is unchanged and the error index of 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code ParsePosition} is set to the index where the error occurred. 557f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to parse. 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param position 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * input/output parameter, specifies the start index in 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string} from where to start parsing. If parsing is 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * successful, it is updated with the index following the parsed 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * text; on error, the index is unchanged and the error index is 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set to the index where the error occurred. 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code Number} resulting from the parse or {@code null} if 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * there is an error. 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract Number parse(String string, ParsePosition position); 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Object parseObject(String string, ParsePosition position) { 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (position == null) { 57403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new NullPointerException("position is null"); 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parse(string, position); 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the currency used by this number format when formatting currency 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values. The min and max fraction digits remain the same. 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This implementation throws {@code UnsupportedOperationException}, 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * concrete subclasses should override this method if they support currency 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 5909b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param currency 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new currency. 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedOperationException 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setCurrency(Currency currency) { 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnsupportedOperationException(); 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets whether this number format formats and parses numbers using a 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * grouping separator. 602f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} if a grouping separator is used; {@code false} 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setGroupingUsed(boolean value) { 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project groupingUsed = value; 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the maximum number of fraction digits that are printed when 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. If the maximum is less than the number of fraction digits, 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the least significant digits are truncated. 615f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the maximum number of fraction digits. 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMaximumFractionDigits(int value) { 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumFractionDigits = value < 0 ? 0 : value; 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (maximumFractionDigits < minimumFractionDigits) { 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumFractionDigits = maximumFractionDigits; 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the new maximum count of integer digits that are printed when 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. If the maximum is less than the number of integer digits, the 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * most significant digits are truncated. 630f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new maximum number of integer numerals for display. 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMaximumIntegerDigits(int value) { 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumIntegerDigits = value < 0 ? 0 : value; 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (maximumIntegerDigits < minimumIntegerDigits) { 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumIntegerDigits = maximumIntegerDigits; 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the minimum number of fraction digits that are printed when 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 644f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the minimum number of fraction digits. 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMinimumFractionDigits(int value) { 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumFractionDigits = value < 0 ? 0 : value; 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (maximumFractionDigits < minimumFractionDigits) { 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumFractionDigits = minimumFractionDigits; 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the minimum number of integer digits that are printed when 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 658f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the minimum number of integer digits. 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMinimumIntegerDigits(int value) { 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumIntegerDigits = value < 0 ? 0 : value; 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (maximumIntegerDigits < minimumIntegerDigits) { 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumIntegerDigits = minimumIntegerDigits; 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Specifies if this number format should parse numbers only as integers or 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * else as any kind of number. If this method is called with a {@code true} 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value then subsequent parsing attempts will stop if a decimal separator 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is encountered. 674f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} to only parse integers, {@code false} to parse 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * integers as well as fractions. 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setParseIntegerOnly(boolean value) { 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project parseIntegerOnly = value; 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final ObjectStreamField[] serialPersistentFields = { 68403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("groupingUsed", Boolean.TYPE), 68503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("maxFractionDigits", Byte.TYPE), 68603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("maximumFractionDigits", Integer.TYPE), 68703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("maximumIntegerDigits", Integer.TYPE), 68803c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("maxIntegerDigits", Byte.TYPE), 68903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("minFractionDigits", Byte.TYPE), 69003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("minimumFractionDigits", Integer.TYPE), 69103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("minimumIntegerDigits", Integer.TYPE), 69203c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("minIntegerDigits", Byte.TYPE), 69303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("parseIntegerOnly", Boolean.TYPE), 69403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes new ObjectStreamField("serialVersionOnStream", Integer.TYPE), }; 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectOutputStream.PutField fields = stream.putFields(); 69803c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("groupingUsed", groupingUsed); 69903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("maxFractionDigits", 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumFractionDigits < Byte.MAX_VALUE ? (byte) maximumFractionDigits 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : Byte.MAX_VALUE); 70203c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("maximumFractionDigits", maximumFractionDigits); 70303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("maximumIntegerDigits", maximumIntegerDigits); 70403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("maxIntegerDigits", 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumIntegerDigits < Byte.MAX_VALUE ? (byte) maximumIntegerDigits 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : Byte.MAX_VALUE); 70703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("minFractionDigits", 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumFractionDigits < Byte.MAX_VALUE ? (byte) minimumFractionDigits 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : Byte.MAX_VALUE); 710f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes fields.put("minimumFractionDigits", minimumFractionDigits); 71103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("minimumIntegerDigits", minimumIntegerDigits); 71203c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("minIntegerDigits", 71303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumIntegerDigits < Byte.MAX_VALUE ? (byte) minimumIntegerDigits : Byte.MAX_VALUE); 71403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("parseIntegerOnly", parseIntegerOnly); 71503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("serialVersionOnStream", 1); 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.writeFields(); 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void readObject(ObjectInputStream stream) throws IOException, 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ClassNotFoundException { 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectInputStream.GetField fields = stream.readFields(); 72203c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes groupingUsed = fields.get("groupingUsed", true); 72303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes parseIntegerOnly = fields.get("parseIntegerOnly", false); 72403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes if (fields.get("serialVersionOnStream", 0) == 0) { 72503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes maximumFractionDigits = fields.get("maxFractionDigits", (byte) 3); 72603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes maximumIntegerDigits = fields.get("maxIntegerDigits", (byte) 40); 72703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumFractionDigits = fields.get("minFractionDigits", (byte) 0); 72803c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumIntegerDigits = fields.get("minIntegerDigits", (byte) 1); 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 73003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes maximumFractionDigits = fields.get("maximumFractionDigits", 3); 73103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes maximumIntegerDigits = fields.get("maximumIntegerDigits", 40); 73203c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumFractionDigits = fields.get("minimumFractionDigits", 0); 73303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumIntegerDigits = fields.get("minimumIntegerDigits", 1); 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (minimumIntegerDigits > maximumIntegerDigits 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || minimumFractionDigits > maximumFractionDigits) { 73703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new InvalidObjectException("min digits greater than max digits"); 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (minimumIntegerDigits < 0 || maximumIntegerDigits < 0 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || minimumFractionDigits < 0 || maximumFractionDigits < 0) { 74103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new InvalidObjectException("min or max digits negative"); 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The instances of this inner class are used as attribute keys and values 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in {@code AttributedCharacterIterator} that the 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link NumberFormat#formatToCharacterIterator(Object)} method returns. 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * There is no public constructor in this class, the only instances are the 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * constants defined here. 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static class Field extends Format.Field { 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 7494728892700160890L; 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the number sign. 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 76103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field SIGN = new Field("sign"); 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the integer part of the number. 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 76603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field INTEGER = new Field("integer"); 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the fraction part of the number. 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 77103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field FRACTION = new Field("fraction"); 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the exponent part of the number. 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 77603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field EXPONENT = new Field("exponent"); 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the exponent sign symbol. 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field EXPONENT_SIGN = new Field("exponent sign"); 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the exponent symbol. 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field EXPONENT_SYMBOL = new Field("exponent symbol"); 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the decimal separator. 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field DECIMAL_SEPARATOR = new Field("decimal separator"); 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the grouping separator. 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field GROUPING_SEPARATOR = new Field("grouping separator"); 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the percent symbol. 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field PERCENT = new Field("percent"); 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the permille symbol. 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field PERMILLE = new Field("per mille"); 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the currency symbol. 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 81103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field CURRENCY = new Field("currency"); 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of {@code NumberFormat.Field} with the 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * given field name. 8169b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param fieldName 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the field name. 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Field(String fieldName) { 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(fieldName); 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Resolves instances that are deserialized to the constant 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code NumberFormat.Field} values. 8279b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the resolved field object. 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidObjectException 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while resolving the field object. 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Object readResolve() throws InvalidObjectException { 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(INTEGER)) { 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return INTEGER; 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(FRACTION)) { 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return FRACTION; 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(EXPONENT)) { 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return EXPONENT; 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(EXPONENT_SIGN)) { 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return EXPONENT_SIGN; 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(EXPONENT_SYMBOL)) { 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return EXPONENT_SYMBOL; 848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(CURRENCY)) { 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return CURRENCY; 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(DECIMAL_SEPARATOR)) { 853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return DECIMAL_SEPARATOR; 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(GROUPING_SEPARATOR)) { 856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return GROUPING_SEPARATOR; 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(PERCENT)) { 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return PERCENT; 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(PERMILLE)) { 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return PERMILLE; 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(SIGN)) { 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return SIGN; 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 86703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new InvalidObjectException("Unknown attribute"); 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 87142db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes /** 87242db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Returns the {@code RoundingMode} used by this {@code NumberFormat}. The default 87342db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * implementation in {@code NumberFormat} throws {@code UnsupportedOperationException}. 87442db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Subclasses for which a rounding mode is meaningful are expected to override this method. 87542db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * @since 1.6 87642db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes */ 87742db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes public RoundingMode getRoundingMode() { 87842db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes throw new UnsupportedOperationException(); 87942db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes } 88042db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes 88142db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes /** 88242db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Sets the {@code RoundingMode} used by this {@code NumberFormat}. The default 88342db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * implementation in {@code NumberFormat} throws {@code UnsupportedOperationException}. 88442db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Subclasses for which a rounding mode is meaningful are expected to override this method. 88542db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * @since 1.6 88642db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes */ 88742db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes public void setRoundingMode(RoundingMode roundingMode) { 88842db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes throw new UnsupportedOperationException(); 88942db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes } 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 891