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 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InvalidObjectException; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectInputStream; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectOutputStream; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectStreamField; 25d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughesimport java.math.BigInteger; 2642db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughesimport java.math.RoundingMode; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Currency; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Locale; 29162b0775772fa66b7eb634760a8159a60c1ddceaElliott Hughesimport libcore.icu.ICU; 30162b0775772fa66b7eb634760a8159a60c1ddceaElliott Hughesimport libcore.icu.LocaleData; 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 15874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int maximumIntegerDigits = 40; 15974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int minimumIntegerDigits = 1; 16074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int maximumFractionDigits = 3; 16174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int minimumFractionDigits = 0; 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 16442db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Used by subclasses. This was public in Java 5. 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16642db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes protected NumberFormat() { 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 17034a3a0501220dd62b88ddb4a355bad46b15c25a2Elliott Hughes * Returns a new {@code NumberFormat} with the same properties. 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.clone(); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the specified object to this number format and indicates if 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * they are equal. In order to be equal, {@code object} must be an instance 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of {@code NumberFormat} with the same pattern and properties. 181f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare with this object. 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the specified object is equal to this number 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format; {@code false} otherwise. 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #hashCode 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object object) { 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object == this) { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(object instanceof NumberFormat)) { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NumberFormat obj = (NumberFormat) object; 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return groupingUsed == obj.groupingUsed 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && parseIntegerOnly == obj.parseIntegerOnly 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && maximumFractionDigits == obj.maximumFractionDigits 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && maximumIntegerDigits == obj.maximumIntegerDigits 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && minimumFractionDigits == obj.minimumFractionDigits 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && minimumIntegerDigits == obj.minimumIntegerDigits; 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified double using the rules of this number format. 207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the double to format. 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the formatted string. 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final String format(double value) { 21374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes return format(value, new StringBuffer(), new FieldPosition(0)).toString(); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified double value as a string using the pattern of this 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number format and appends the string to the specified string buffer. 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the {@code field} member of {@code position} contains a value 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specifying a format field, then its {@code beginIndex} and 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code endIndex} members will be updated with the position of the first 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * occurrence of this field in the formatted text. 2249b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the double to format. 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buffer 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target string buffer to append the formatted double value 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to. 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on input: an optional alignment field; on output: the offsets 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the alignment field in the formatted text. 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string buffer. 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 235d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes public abstract StringBuffer format(double value, StringBuffer buffer, FieldPosition field); 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified long using the rules of this number format. 239f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to format. 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the formatted string. 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final String format(long value) { 24574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes return format(value, new StringBuffer(), new FieldPosition(0)).toString(); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified long value as a string using the pattern of this 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number format and appends the string to the specified string buffer. 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the {@code field} member of {@code position} contains a value 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specifying a format field, then its {@code beginIndex} and 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code endIndex} members will be updated with the position of the first 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * occurrence of this field in the formatted text. 2569b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to format. 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buffer 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target string buffer to append the formatted long value 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to. 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on input: an optional alignment field; on output: the offsets 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the alignment field in the formatted text. 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string buffer. 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 267d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes public abstract StringBuffer format(long value, StringBuffer buffer, FieldPosition field); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 270d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * Formats a number into a supplied buffer. 271d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * <p> 272d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * The number must be a subclass of {@code Number}. Instances of {@code Byte}, {@code Short}, 273d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * {@code Integer}, and {@code Long} have {@code Number.longValue} invoked, as do instances of 274d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * {@code BigInteger} where {@code BigInteger.bitLength} returns <i>less than</i> 64. All other 275d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes * values have {@code Number.doubleValue} invoked instead. 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the {@code field} member of {@code field} contains a value specifying 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a format field, then its {@code beginIndex} and {@code endIndex} members 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will be updated with the position of the first occurrence of this field 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the formatted text. 2819b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to format, must be a {@code Number}. 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buffer 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target string buffer to append the formatted number to. 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on input: an optional alignment field; on output: the offsets 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the alignment field in the formatted text. 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string buffer. 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code object} is not an instance of {@code Number}. 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 294d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes public StringBuffer format(Object object, StringBuffer buffer, FieldPosition field) { 295d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes if (object instanceof Byte || object instanceof Short || object instanceof Integer || 296d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes object instanceof Long || 297d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes (object instanceof BigInteger && ((BigInteger) object).bitLength() < 64)) { 298a1e5d8a2c1594f7a6ed8aca6e82b106ec8ce79d6Elliott Hughes long lv = ((Number) object).longValue(); 299a1e5d8a2c1594f7a6ed8aca6e82b106ec8ce79d6Elliott Hughes return format(lv, buffer, field); 300d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes } else if (object instanceof Number) { 301d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes double dv = ((Number) object).doubleValue(); 302d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes return format(dv, buffer, field); 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 30474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes if (object == null) { 30574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes throw new IllegalArgumentException("Can't format null object"); 30674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } else { 30774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes throw new IllegalArgumentException("Bad class: " + object.getClass()); 30874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 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. 314d2d7abef3e9b73a57cdf1f2afd678d7f48945679Elliott Hughes * <p>Note that Android does not support user-supplied locale service providers. 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Locale[] getAvailableLocales() { 317757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return ICU.getAvailableNumberFormatLocales(); 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the currency used by this number format. 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This implementation throws {@code UnsupportedOperationException}, 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * concrete subclasses should override this method if they support currency 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 327f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the currency that was set in getInstance() or in setCurrency(), 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or {@code null}. 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedOperationException 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Currency getCurrency() { 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnsupportedOperationException(); 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing currency values 3383106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * for the user's default locale. 3393106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 340f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling currency values. 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 3430d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes public static final NumberFormat getCurrencyInstance() { 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getCurrencyInstance(Locale.getDefault()); 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing currency values 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for the specified locale. 350f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale to use. 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling currency values. 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getCurrencyInstance(Locale locale) { 356e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath if (locale == null) { 357e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath throw new NullPointerException("locale == null"); 358e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath } 359e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath 360757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return getInstance(LocaleData.get(locale).currencyPattern, locale); 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing integers for the 3653106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * user's default locale. 3663106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 367f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling integers. 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 3700d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes public static final NumberFormat getIntegerInstance() { 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getIntegerInstance(Locale.getDefault()); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing integers for 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified locale. 377f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale to use. 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling integers. 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getIntegerInstance(Locale locale) { 383e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath if (locale == null) { 384e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath throw new NullPointerException("locale == null"); 385e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath } 386e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath 387757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes NumberFormat result = getInstance(LocaleData.get(locale).integerPattern, locale); 38833aa6eb602478e7f51ac16f30c88db3566022886Elliott Hughes result.setParseIntegerOnly(true); 38933aa6eb602478e7f51ac16f30c88db3566022886Elliott Hughes return result; 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing numbers for the 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * default locale. 395f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling {@code Number} objects. 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 3980d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes public static final NumberFormat getInstance() { 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getNumberInstance(); 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing numbers for the 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified locale. 405f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale to use. 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling {@code Number} objects. 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getInstance(Locale locale) { 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getNumberInstance(locale); 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 414a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes private static NumberFormat getInstance(String pattern, Locale locale) { 415a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes return new DecimalFormat(pattern, locale); 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the maximum number of fraction digits that are printed when 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. If the maximum is less than the number of fraction digits, 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the least significant digits are truncated. 422f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the maximum number of fraction digits. 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMaximumFractionDigits() { 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return maximumFractionDigits; 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the maximum number of integer digits that are printed when 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. If the maximum is less than the number of integer digits, the 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * most significant digits are truncated. 433f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the maximum number of integer digits. 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMaximumIntegerDigits() { 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return maximumIntegerDigits; 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the minimum number of fraction digits that are printed when 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 443f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the minimum number of fraction digits. 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMinimumFractionDigits() { 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return minimumFractionDigits; 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the minimum number of integer digits that are printed when 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 453f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the minimum number of integer digits. 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMinimumIntegerDigits() { 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return minimumIntegerDigits; 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing numbers for the 4623106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * user's default locale. 4633106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 464f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling {@code Number} objects. 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 4670d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes public static final NumberFormat getNumberInstance() { 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getNumberInstance(Locale.getDefault()); 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing numbers for the 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified locale. 474f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale to use. 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code NumberFormat} for handling {@code Number} objects. 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getNumberInstance(Locale locale) { 480e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath if (locale == null) { 481e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath throw new NullPointerException("locale == null"); 482e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath } 483757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return getInstance(LocaleData.get(locale).numberPattern, locale); 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing percentage 4883106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * values for the user's default locale. 4893106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 490f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 491705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * <p>The {@code NumberFormat} returned by this method should only be used 492705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * to format floating-point numbers typically between 0 and 1 (with 1 being 100%). 493705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * A value such as 0.53 will be treated as 53%, but 53.0 (or the integer 53) will be 494705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * treated as 5,300%, which is rarely what you intended. 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 4960d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes public static final NumberFormat getPercentInstance() { 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getPercentInstance(Locale.getDefault()); 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code NumberFormat} for formatting and parsing percentage 502705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * values for the given {@code locale}. 503f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 504705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * <p>The {@code NumberFormat} returned by this method should only be used 505705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * to format floating-point numbers typically between 0 and 1 (with 1 being 100%). 506705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * A value such as 0.53 will be treated as 53%, but 53.0 (or the integer 53) will be 507705462a2b003b2eeed90bf3cebe0871e02554cbdElliott Hughes * treated as 5,300%, which is rarely what you intended. 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static NumberFormat getPercentInstance(Locale locale) { 510e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath if (locale == null) { 511e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath throw new NullPointerException("locale == null"); 512e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath } 513e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath 514757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return getInstance(LocaleData.get(locale).percentPattern, locale); 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (groupingUsed ? 1231 : 1237) + (parseIntegerOnly ? 1231 : 1237) 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + maximumFractionDigits + maximumIntegerDigits 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + minimumFractionDigits + minimumIntegerDigits; 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether this number format formats and parses numbers using a 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * grouping separator. 527f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if a grouping separator is used; {@code false} 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isGroupingUsed() { 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return groupingUsed; 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 53674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes * Returns true if this number format only parses integer numbers. Parsing 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stops if a decimal separator is encountered. 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isParseIntegerOnly() { 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parseIntegerOnly; 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses a {@code Number} from the specified string using the rules of this 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number format. 546f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to parse. 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code Number} resulting from the parsing. 5509b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws ParseException 5519b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if an error occurs during parsing. 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Number parse(String string) throws ParseException { 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ParsePosition pos = new ParsePosition(0); 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Number number = parse(string, pos); 556fe1eba10c5d69e115dfab55d82cc22d42e9fbae5Elliott Hughes if (pos.getIndex() == 0) { 557b272dc3a96c819d5709de9de11e800d87f7a42fcElliott Hughes throw new ParseException("Unparseable number: \"" + string + "\"", pos.getErrorIndex()); 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return number; 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses a {@code Number} from the specified string starting at the index 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified by {@code position}. If the string is successfully parsed then 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index of the {@code ParsePosition} is updated to the index following 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parsed text. On error, the index is unchanged and the error index of 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code ParsePosition} is set to the index where the error occurred. 568f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to parse. 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param position 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * input/output parameter, specifies the start index in 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string} from where to start parsing. If parsing is 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * successful, it is updated with the index following the parsed 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * text; on error, the index is unchanged and the error index is 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set to the index where the error occurred. 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code Number} resulting from the parse or {@code null} if 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * there is an error. 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract Number parse(String string, ParsePosition position); 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Object parseObject(String string, ParsePosition position) { 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (position == null) { 585d43b9ef11a1095967a3396b246639b563e1a4128Kenny Root throw new NullPointerException("position == null"); 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parse(string, position); 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the currency used by this number format when formatting currency 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values. The min and max fraction digits remain the same. 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This implementation throws {@code UnsupportedOperationException}, 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * concrete subclasses should override this method if they support currency 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 6019b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param currency 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new currency. 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedOperationException 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setCurrency(Currency currency) { 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnsupportedOperationException(); 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets whether this number format formats and parses numbers using a 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * grouping separator. 613f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} if a grouping separator is used; {@code false} 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setGroupingUsed(boolean value) { 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project groupingUsed = value; 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the maximum number of fraction digits that are printed when 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. If the maximum is less than the number of fraction digits, 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the least significant digits are truncated. 626f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the maximum number of fraction digits. 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMaximumFractionDigits(int value) { 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumFractionDigits = value < 0 ? 0 : value; 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (maximumFractionDigits < minimumFractionDigits) { 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumFractionDigits = maximumFractionDigits; 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the new maximum count of integer digits that are printed when 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. If the maximum is less than the number of integer digits, the 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * most significant digits are truncated. 641f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new maximum number of integer numerals for display. 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMaximumIntegerDigits(int value) { 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumIntegerDigits = value < 0 ? 0 : value; 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (maximumIntegerDigits < minimumIntegerDigits) { 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumIntegerDigits = maximumIntegerDigits; 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the minimum number of fraction digits that are printed when 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 655f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the minimum number of fraction digits. 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMinimumFractionDigits(int value) { 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumFractionDigits = value < 0 ? 0 : value; 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (maximumFractionDigits < minimumFractionDigits) { 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumFractionDigits = minimumFractionDigits; 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the minimum number of integer digits that are printed when 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 669f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the minimum number of integer digits. 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMinimumIntegerDigits(int value) { 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumIntegerDigits = value < 0 ? 0 : value; 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (maximumIntegerDigits < minimumIntegerDigits) { 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumIntegerDigits = minimumIntegerDigits; 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Specifies if this number format should parse numbers only as integers or 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * else as any kind of number. If this method is called with a {@code true} 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value then subsequent parsing attempts will stop if a decimal separator 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is encountered. 685f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} to only parse integers, {@code false} to parse 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * integers as well as fractions. 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setParseIntegerOnly(boolean value) { 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project parseIntegerOnly = value; 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final ObjectStreamField[] serialPersistentFields = { 695e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("groupingUsed", boolean.class), 696e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("maxFractionDigits", byte.class), 697e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("maximumFractionDigits", int.class), 698e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("maximumIntegerDigits", int.class), 699e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("maxIntegerDigits", byte.class), 700e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("minFractionDigits", byte.class), 701e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("minimumFractionDigits", int.class), 702e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("minimumIntegerDigits", int.class), 703e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("minIntegerDigits", byte.class), 704e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("parseIntegerOnly", boolean.class), 705e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("serialVersionOnStream", int.class), 70628eb98ecd43c27702e85b0561e040e2da10320a6Elliott Hughes }; 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectOutputStream.PutField fields = stream.putFields(); 71003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("groupingUsed", groupingUsed); 71103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("maxFractionDigits", 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumFractionDigits < Byte.MAX_VALUE ? (byte) maximumFractionDigits 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : Byte.MAX_VALUE); 71403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("maximumFractionDigits", maximumFractionDigits); 71503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("maximumIntegerDigits", maximumIntegerDigits); 71603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("maxIntegerDigits", 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maximumIntegerDigits < Byte.MAX_VALUE ? (byte) maximumIntegerDigits 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : Byte.MAX_VALUE); 71903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("minFractionDigits", 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimumFractionDigits < Byte.MAX_VALUE ? (byte) minimumFractionDigits 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : Byte.MAX_VALUE); 722f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes fields.put("minimumFractionDigits", minimumFractionDigits); 72303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("minimumIntegerDigits", minimumIntegerDigits); 72403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("minIntegerDigits", 72503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumIntegerDigits < Byte.MAX_VALUE ? (byte) minimumIntegerDigits : Byte.MAX_VALUE); 72603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("parseIntegerOnly", parseIntegerOnly); 72703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes fields.put("serialVersionOnStream", 1); 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.writeFields(); 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void readObject(ObjectInputStream stream) throws IOException, 732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ClassNotFoundException { 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectInputStream.GetField fields = stream.readFields(); 73403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes groupingUsed = fields.get("groupingUsed", true); 73503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes parseIntegerOnly = fields.get("parseIntegerOnly", false); 73603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes if (fields.get("serialVersionOnStream", 0) == 0) { 73703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes maximumFractionDigits = fields.get("maxFractionDigits", (byte) 3); 73803c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes maximumIntegerDigits = fields.get("maxIntegerDigits", (byte) 40); 73903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumFractionDigits = fields.get("minFractionDigits", (byte) 0); 74003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumIntegerDigits = fields.get("minIntegerDigits", (byte) 1); 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 74203c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes maximumFractionDigits = fields.get("maximumFractionDigits", 3); 74303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes maximumIntegerDigits = fields.get("maximumIntegerDigits", 40); 74403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumFractionDigits = fields.get("minimumFractionDigits", 0); 74503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes minimumIntegerDigits = fields.get("minimumIntegerDigits", 1); 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (minimumIntegerDigits > maximumIntegerDigits 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || minimumFractionDigits > maximumFractionDigits) { 74903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new InvalidObjectException("min digits greater than max digits"); 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (minimumIntegerDigits < 0 || maximumIntegerDigits < 0 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || minimumFractionDigits < 0 || maximumFractionDigits < 0) { 75303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new InvalidObjectException("min or max digits negative"); 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The instances of this inner class are used as attribute keys and values 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in {@code AttributedCharacterIterator} that the 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link NumberFormat#formatToCharacterIterator(Object)} method returns. 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static class Field extends Format.Field { 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 7494728892700160890L; 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the number sign. 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 76903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field SIGN = new Field("sign"); 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the integer part of the number. 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 77403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field INTEGER = new Field("integer"); 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the fraction part of the number. 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 77903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field FRACTION = new Field("fraction"); 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the exponent part of the number. 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field EXPONENT = new Field("exponent"); 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the exponent sign symbol. 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field EXPONENT_SIGN = new Field("exponent sign"); 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the exponent symbol. 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field EXPONENT_SYMBOL = new Field("exponent symbol"); 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the decimal separator. 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field DECIMAL_SEPARATOR = new Field("decimal separator"); 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the grouping separator. 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field GROUPING_SEPARATOR = new Field("grouping separator"); 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the percent symbol. 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field PERCENT = new Field("percent"); 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the permille symbol. 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 81403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field PERMILLE = new Field("per mille"); 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constant stands for the currency symbol. 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 81903c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public static final Field CURRENCY = new Field("currency"); 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of {@code NumberFormat.Field} with the 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * given field name. 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Field(String fieldName) { 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(fieldName); 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 83042db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes /** 83142db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Returns the {@code RoundingMode} used by this {@code NumberFormat}. The default 83242db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * implementation in {@code NumberFormat} throws {@code UnsupportedOperationException}. 83342db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Subclasses for which a rounding mode is meaningful are expected to override this method. 83442db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * @since 1.6 83542db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes */ 83642db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes public RoundingMode getRoundingMode() { 83742db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes throw new UnsupportedOperationException(); 83842db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes } 83942db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes 84042db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes /** 84142db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Sets the {@code RoundingMode} used by this {@code NumberFormat}. The default 84242db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * implementation in {@code NumberFormat} throws {@code UnsupportedOperationException}. 84342db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * Subclasses for which a rounding mode is meaningful are expected to override this method. 84442db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes * @since 1.6 84542db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes */ 84642db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes public void setRoundingMode(RoundingMode roundingMode) { 84742db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes throw new UnsupportedOperationException(); 84842db7d138547e3bba75cf6ed02b6a319e30004aeElliott Hughes } 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 850