DecimalFormat.java revision 186ae3b4b3ccad7baad8a33d59952263427ddda5
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 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 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 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 Project// BEGIN android-note 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// The icu implementation used was changed from icu4j to icu4jni. 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// END android-note 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.text; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectInputStream; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectOutputStream; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectStreamField; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigDecimal; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AccessController; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PrivilegedAction; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Currency; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Locale; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35820dd9b89746b3e3005bd5d23176cde1a69048b7Elliott Hughesimport com.ibm.icu4jni.text.NativeDecimalFormat; 3633aa6eb602478e7f51ac16f30c88db3566022886Elliott Hughesimport com.ibm.icu4jni.util.LocaleData; 3733aa6eb602478e7f51ac16f30c88db3566022886Elliott Hughes 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A concrete subclass of {@link NumberFormat} that formats decimal numbers. It 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has a variety of features designed to make it possible to parse and format 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * numbers in any locale, including support for Western, Arabic, or Indic 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * digits. It also supports different flavors of numbers, including integers 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ("123"), fixed-point numbers ("123.4"), scientific notation ("1.23E4"), 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * percentages ("12%"), and currency amounts ("$123"). All of these flavors can 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be easily localized. 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>This is an enhanced version of {@code DecimalFormat} that is based on 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the standard version in the RI. New or changed functionality is labeled 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong><font color="red">NEW</font></strong>.</strong> 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * To obtain a {@link NumberFormat} for a specific locale (including the default 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * locale), call one of {@code NumberFormat}'s factory methods such as 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code NumberFormat.getInstance}. Do not call the {@code DecimalFormat} 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * constructors directly, unless you know what you are doing, since the 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link NumberFormat} factory methods may return subclasses other than 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DecimalFormat}. If you need to customize the format object, do 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * something like this: <blockquote> 589b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NumberFormat f = NumberFormat.getInstance(loc); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if (f instanceof DecimalFormat) { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ((DecimalFormat)f).setDecimalSeparatorAlwaysShown(true); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 659b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h5>Example:</h5> 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 699b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * // Print out a number using the localized number, currency, 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * // and percent format for each locale 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Locale[] locales = NumberFormat.getAvailableLocales(); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * double myNumber = -1234.56; 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NumberFormat format; 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for (int j = 0; j < 3; ++j) { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * System.out.println("FORMAT"); 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for (int i = 0; i < locales.length; ++i) { 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if (locales[i].getCountry().length() == 0) { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * // Skip language-only locales 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * continue; 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * System.out.print(locales[i].getDisplayName()); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * switch (j) { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * case 0: 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format = NumberFormat.getInstance(locales[i]); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * break; 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * case 1: 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format = NumberFormat.getCurrencyInstance(locales[i]); 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * break; 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * default: 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format = NumberFormat.getPercentInstance(locales[i]); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * break; 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * try { 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * // Assume format is a DecimalFormat 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * System.out.print(": "; + ((DecimalFormat)format).toPattern() + " -> " 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * + form.format(myNumber)); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } catch (Exception e) { 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * try { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * System.out.println(" -> " + format.parse(form.format(myNumber))); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } catch (ParseException e) { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 1089b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Patterns</h4> 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A {@code DecimalFormat} consists of a <em>pattern</em> and a set of 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>symbols</em>. The pattern may be set directly using 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link #applyPattern(String)}, or indirectly using other API methods which 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * manipulate aspects of the pattern, such as the minimum number of integer 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * digits. The symbols are stored in a {@link DecimalFormatSymbols} object. When 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * using the {@link NumberFormat} factory methods, the pattern and symbols are 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * read from ICU's locale data. 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Special Pattern Characters</h4> 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Many characters in a pattern are taken literally; they are matched during 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parsing and are written out unchanged during formatting. On the other hand, 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * special characters stand for other characters, strings, or classes of 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * characters. For example, the '#' character is replaced by a localized digit. 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Often the replacement character is the same as the pattern character; in the 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * U.S. locale, the ',' grouping character is replaced by ','. However, the 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * replacement is still happening, and if the symbols are modified, the grouping 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * character changes. Some special characters affect the behavior of the 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatter by their presence; for example, if the percent character is seen, 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * then the value is multiplied by 100 before being displayed. 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * To insert a special character in a pattern as a literal, that is, without any 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * special meaning, the character must be quoted. There are some exceptions to 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this which are noted below. 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The characters listed here are used in non-localized patterns. Localized 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * patterns use the corresponding characters taken from this formatter's 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link DecimalFormatSymbols} object instead, and these characters lose their 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * special status. Two exceptions are the currency sign and quote, which are not 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * localized. 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> <table border="0" cellspacing="3" cellpadding="0" summary="Chart 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * showing symbol, location, localized, and meaning."> 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr bgcolor="#ccccff"> 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <th align="left">Symbol</th> 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <th align="left">Location</th> 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <th align="left">Localized?</th> 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <th align="left">Meaning</th> 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code 0}</td> 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Number</td> 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Digit.</td> 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code @}</td> 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Number</td> 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>No</td> 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td><strong><font color="red">NEW</font> </strong> Significant 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * digit.</td> 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top" bgcolor="#eeeeff"> 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code #}</td> 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Number</td> 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Digit, leading zeroes are not shown.</td> 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code .}</td> 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Number</td> 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Decimal separator or monetary decimal separator.</td> 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top" bgcolor="#eeeeff"> 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code -}</td> 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Number</td> 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Minus sign.</td> 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code ,}</td> 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Number</td> 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Grouping separator.</td> 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top" bgcolor="#eeeeff"> 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code E}</td> 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Number</td> 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Separates mantissa and exponent in scientific notation. 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>Does not need to be quoted in prefix or suffix.</em></td> 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code +}</td> 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Exponent</td> 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td><strong><font color="red">NEW</font> </strong> Prefix 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * positive exponents with localized plus sign. 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>Does not need to be quoted in prefix or suffix.</em></td> 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top" bgcolor="#eeeeff"> 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code ;}</td> 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Subpattern boundary</td> 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Separates positive and negative subpatterns.</td> 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code %}</td> 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Prefix or suffix</td> 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Multiply by 100 and show as percentage.</td> 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top" bgcolor="#eeeeff"> 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code \u2030} ({@code \u2030})</td> 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Prefix or suffix</td> 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Multiply by 1000 and show as per mille.</td> 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code ¤} ({@code \u00A4})</td> 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Prefix or suffix</td> 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>No</td> 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Currency sign, replaced by currency symbol. If doubled, replaced by 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * international currency symbol. If present in a pattern, the monetary decimal 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * separator is used instead of the decimal separator.</td> 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top" bgcolor="#eeeeff"> 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code '}</td> 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Prefix or suffix</td> 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>No</td> 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Used to quote special characters in a prefix or suffix, for example, 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code "'#'#"} formats 123 to {@code "#123"}. To create a single quote 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * itself, use two in a row: {@code "# o''clock"}.</td> 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code *}</td> 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Prefix or suffix boundary</td> 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>Yes</td> 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td><strong><font color="red">NEW</font> </strong> Pad escape, 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * precedes pad character. </td> 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </table> </blockquote> 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A {@code DecimalFormat} pattern contains a postive and negative subpattern, 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for example, "#,##0.00;(#,##0.00)". Each subpattern has a prefix, a numeric 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * part and a suffix. If there is no explicit negative subpattern, the negative 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subpattern is the localized minus sign prefixed to the positive subpattern. 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * That is, "0.00" alone is equivalent to "0.00;-0.00". If there is an explicit 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * negative subpattern, it serves only to specify the negative prefix and 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * suffix; the number of digits, minimal digits, and other characteristics are 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ignored in the negative subpattern. This means that "#,##0.0#;(#)" produces 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * precisely the same result as "#,##0.0#;(#,##0.0#)". 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The prefixes, suffixes, and various symbols used for infinity, digits, 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thousands separators, decimal separators, etc. may be set to arbitrary 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values, and they will appear properly during formatting. However, care must 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be taken that the symbols and strings do not conflict, or parsing will be 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * unreliable. For example, either the positive and negative prefixes or the 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * suffixes must be distinct for {@link #parse} to be able to distinguish 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * positive from negative values. Another example is that the decimal separator 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and thousands separator should be distinct characters, or parsing will be 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * impossible. 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The <em>grouping separator</em> is a character that separates clusters of 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * integer digits to make large numbers more legible. It is commonly used for 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thousands, but in some locales it separates ten-thousands. The <em>grouping 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * size</em> 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is the number of digits between the grouping separators, such as 3 for 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "100,000,000" or 4 for "1 0000 0000". There are actually two different 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * grouping sizes: One used for the least significant integer digits, the 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>primary grouping size</em>, and one used for all others, the 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>secondary grouping size</em>. In most locales these are the same, but 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sometimes they are different. For example, if the primary grouping interval 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is 3, and the secondary is 2, then this corresponds to the pattern 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "#,##,##0", and the number 123456789 is formatted as "12,34,56,789". If a 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * pattern contains multiple grouping separators, the interval between the last 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one and the end of the integer defines the primary grouping size, and the 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * interval between the last two defines the secondary grouping size. All others 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are ignored, so "#,##,###,####", "###,###,####" and "##,#,###,####" produce 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the same result. 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Illegal patterns, such as "#.#.#" or "#.###,###", will cause 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DecimalFormat} to throw an {@link IllegalArgumentException} with a 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * message that describes the problem. 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Pattern BNF</h4> 2869b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * pattern := subpattern (';' subpattern)? 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subpattern := prefix? number exponent? suffix? 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number := (integer ('.' fraction)?) | sigDigits 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * prefix := '\\u0000'..'\\uFFFD' - specialCharacters 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * suffix := '\\u0000'..'\\uFFFD' - specialCharacters 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * integer := '#'* '0'* '0' 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fraction := '0'* '#'* 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sigDigits := '#'* '@' '@'* '#'* 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * exponent := 'E' '+'? '0'* '0' 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * padSpec := '*' padChar 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * padChar := '\\u0000'..'\\uFFFD' - quote 2999b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Notation: 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * X* 0 or more instances of X 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * X? 0 or 1 instances of X 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * X|Y either X or Y 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * C..D any character from C up to D, inclusive 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * S-T characters in S, except those in T 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 3079b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The first subpattern is for positive numbers. The second (optional) 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subpattern is for negative numbers. 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Not indicated in the BNF syntax above: 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>The grouping separator ',' can occur inside the integer and sigDigits 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements, between any two pattern characters of that element, as long as the 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * integer or sigDigits element is not followed by the exponent element. 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li><font color="red"><strong>NEW</strong> </font> Two 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * grouping intervals are recognized: The one between the decimal point and the 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * first grouping symbol and the one between the first and second grouping 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * symbols. These intervals are identical in most locales, but in some locales 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * they differ. For example, the pattern "#,##,###" formats the number 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 123456789 as "12,34,56,789".</li> 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li> <strong><font color="red">NEW</font> </strong> The pad 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specifier {@code padSpec} may appear before the prefix, after the prefix, 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * before the suffix, after the suffix or not at all. 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Parsing</h4> 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DecimalFormat} parses all Unicode characters that represent decimal 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * digits, as defined by {@link Character#digit(int, int)}. In addition, 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DecimalFormat} also recognizes as digits the ten consecutive 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * characters starting with the localized zero digit defined in the 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link DecimalFormatSymbols} object. During formatting, the 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link DecimalFormatSymbols}-based digits are written out. 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * During parsing, grouping separators are ignored. 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If {@link #parse(String, ParsePosition)} fails to parse a string, it returns 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} and leaves the parse position unchanged. 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Formatting</h4> 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formatting is guided by several parameters, all of which can be specified 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * either using a pattern or using the API. The following description applies to 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formats that do not use <a href="#sci">scientific notation</a> or <a 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * href="#sigdig">significant digits</a>. 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>If the number of actual integer digits exceeds the 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>maximum integer digits</em>, then only the least significant digits 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are shown. For example, 1997 is formatted as "97" if maximum integer digits 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is set to 2. 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>If the number of actual integer digits is less than the 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>minimum integer digits</em>, then leading zeros are added. For 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * example, 1997 is formatted as "01997" if minimum integer digits is set to 5. 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>If the number of actual fraction digits exceeds the <em>maximum 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fraction digits</em>, 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * then half-even rounding is performed to the maximum fraction digits. For 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * example, 0.125 is formatted as "0.12" if the maximum fraction digits is 2. 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>If the number of actual fraction digits is less than the 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>minimum fraction digits</em>, then trailing zeros are added. For 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * example, 0.125 is formatted as "0.1250" if the mimimum fraction digits is set 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to 4. 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Trailing fractional zeros are not displayed if they occur <em>j</em> 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * positions after the decimal, where <em>j</em> is less than the maximum 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fraction digits. For example, 0.10004 is formatted as "0.1" if the maximum 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fraction digits is four or less. 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Special Values</strong> 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code NaN} is represented as a single character, typically 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code \uFFFD}. This character is determined by the 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link DecimalFormatSymbols} object. This is the only value for which the 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * prefixes and suffixes are not used. 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Infinity is represented as a single character, typically {@code \u221E}, 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with the positive or negative prefixes and suffixes applied. The infinity 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * character is determined by the {@link DecimalFormatSymbols} object. <a 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * name="sci"> 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Scientific Notation</h4> 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </a> 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Numbers in scientific notation are expressed as the product of a mantissa and 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a power of ten, for example, 1234 can be expressed as 1.234 x 10<sup>3</sup>. 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The mantissa is typically in the half-open interval [1.0, 10.0) or sometimes 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * [0.0, 1.0), but it does not need to be. {@code DecimalFormat} supports 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * arbitrary mantissas. {@code DecimalFormat} can be instructed to use 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * scientific notation through the API or through the pattern. In a pattern, the 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * exponent character immediately followed by one or more digit characters 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicates scientific notation. Example: "0.###E0" formats the number 1234 as 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "1.234E3". 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>The number of digit characters after the exponent character gives the 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * minimum exponent digit count. There is no maximum. Negative exponents are 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatted using the localized minus sign, <em>not</em> the prefix and 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * suffix from the pattern. This allows patterns such as "0.###E0 m/s". To 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * prefix positive exponents with a localized plus sign, specify '+' between the 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * exponent and the digits: "0.###E+0" will produce formats "1E+1", "1E+0", 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "1E-1", etc. (In localized patterns, use the localized plus sign rather than 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * '+'.) 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>The minimum number of integer digits is achieved by adjusting the 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * exponent. Example: 0.00123 formatted with "00.###E0" yields "12.3E-4". This 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * only happens if there is no maximum number of integer digits. If there is a 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maximum, then the minimum number of integer digits is fixed at one. 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>The maximum number of integer digits, if present, specifies the exponent 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * grouping. The most common use of this is to generate <em>engineering 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * notation</em>, 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in which the exponent is a multiple of three, e.g., "##0.###E0". The number 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 12345 is formatted using "##0.###E0" as "12.345E3". 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>When using scientific notation, the formatter controls the digit counts 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * using significant digits logic. The maximum number of significant digits 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limits the total number of integer and fraction digits that will be shown in 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the mantissa; it does not affect parsing. For example, 12345 formatted with 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "##0.##E0" is "12.3E3". See the section on significant digits for more 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * details. 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>The number of significant digits shown is determined as follows: If no 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * significant digits are used in the pattern then the minimum number of 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * significant digits shown is one, the maximum number of significant digits 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * shown is the sum of the <em>minimum integer</em> and 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>maximum fraction</em> digits, and it is unaffected by the maximum 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * integer digits. If this sum is zero, then all significant digits are shown. 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If significant digits are used in the pattern then the number of integer 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * digits is fixed at one and there is no exponent grouping. 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Exponential patterns may not contain grouping separators. 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <a name="sigdig"> 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4> <strong><font color="red">NEW</font> </strong> Significant 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Digits</h4> 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </a> {@code DecimalFormat} has two ways of controlling how many digits are 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * shown: (a) significant digit counts or (b) integer and fraction digit counts. 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Integer and fraction digit counts are described above. When a formatter uses 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * significant digits counts, the number of integer and fraction digits is not 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified directly, and the formatter settings for these counts are ignored. 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Instead, the formatter uses as many integer and fraction digits as required 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to display the specified number of significant digits. 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h5>Examples:</h5> 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> <table border=0 cellspacing=3 cellpadding=0> 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr bgcolor="#ccccff"> 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <th align="left">Pattern</th> 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <th align="left">Minimum significant digits</th> 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <th align="left">Maximum significant digits</th> 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <th align="left">Number</th> 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <th align="left">Output of format()</th> 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code @@@} 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>3</td> 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>3</td> 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>12345</td> 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code 12300}</td> 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top" bgcolor="#eeeeff"> 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code @@@}</td> 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>3</td> 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>3</td> 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>0.12345</td> 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code 0.123}</td> 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top"> 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code @@##}</td> 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>2</td> 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>4</td> 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>3.14159</td> 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code 3.142}</td> 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tr valign="top" bgcolor="#eeeeff"> 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code @@##}</td> 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>2</td> 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>4</td> 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>1.23004</td> 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <td>{@code 1.23}</td> 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </tr> 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </table> </blockquote> 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Significant digit counts may be expressed using patterns that specify a 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * minimum and maximum number of significant digits. These are indicated by the 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code '@'} and {@code '#'} characters. The minimum number of significant 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * digits is the number of {@code '@'} characters. The maximum number of 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * significant digits is the number of {@code '@'} characters plus the number of 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code '#'} characters following on the right. For example, the pattern 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code "@@@"} indicates exactly 3 significant digits. The pattern 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code "@##"} indicates from 1 to 3 significant digits. Trailing zero digits 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the right of the decimal separator are suppressed after the minimum number 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of significant digits have been shown. For example, the pattern {@code "@##"} 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formats the number 0.1203 as {@code "0.12"}. 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>If a pattern uses significant digits, it may not contain a decimal 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * separator, nor the {@code '0'} pattern character. Patterns such as 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code "@00"} or {@code "@.###"} are disallowed. 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Any number of {@code '#'} characters may be prepended to the left of the 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * leftmost {@code '@'} character. These have no effect on the minimum and 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maximum significant digit counts, but may be used to position grouping 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * separators. For example, {@code "#,#@#"} indicates a minimum of one 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * significant digit, a maximum of two significant digits, and a grouping size 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of three. 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>In order to enable significant digits formatting, use a pattern 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * containing the {@code '@'} pattern character. 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>In order to disable significant digits formatting, use a pattern that 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * does not contain the {@code '@'} pattern character. 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>The number of significant digits has no effect on parsing. 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Significant digits may be used together with exponential notation. Such 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * patterns are equivalent to a normal exponential pattern with a minimum and 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maximum integer digit count of one, a minimum fraction digit count of the 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number of '@' characters in the pattern - 1, and a maximum fraction digit 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * count of the number of '@' and '#' characters in the pattern - 1. For 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * example, the pattern {@code "@@###E0"} is equivalent to {@code "0.0###E0"}. 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>If signficant digits are in use then the integer and fraction digit 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * counts, as set via the API, are ignored. 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4> <strong><font color="red">NEW</font> </strong> Padding</h4> 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DecimalFormat} supports padding the result of {@code format} to a 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specific width. Padding may be specified either through the API or through 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the pattern syntax. In a pattern, the pad escape character followed by a 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * single pad character causes padding to be parsed and formatted. The pad 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * escape character is '*' in unlocalized patterns. For example, 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code "$*x#,##0.00"} formats 123 to {@code "$xx123.00"}, and 1234 to 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code "$1,234.00"}. 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>When padding is in effect, the width of the positive subpattern, 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * including prefix and suffix, determines the format width. For example, in the 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * pattern {@code "* #0 o''clock"}, the format width is 10.</li> 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>The width is counted in 16-bit code units (Java {@code char}s).</li> 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Some parameters which usually do not matter have meaning when padding is 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used, because the pattern width is significant with padding. In the pattern "* 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ##,##,#,##0.##", the format width is 14. The initial characters "##,##," do 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * not affect the grouping size or maximum integer digits, but they do affect 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the format width.</li> 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Padding may be inserted at one of four locations: before the prefix, 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * after the prefix, before the suffix or after the suffix. If padding is 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified in any other location, {@link #applyPattern} throws an {@link 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException}. If there is no prefix, before the prefix and after 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the prefix are equivalent, likewise for the suffix.</li> 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>When specified in a pattern, the 16-bit {@code char} immediately 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * following the pad escape is the pad character. This may be any character, 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * including a special pattern character. That is, the pad escape 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>escapes</em> the following character. If there is no character after 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the pad escape, then the pattern is illegal.</li> 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Synchronization</h4> 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DecimalFormat} objects are not synchronized. Multiple threads should 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * not access one formatter concurrently. 5429b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Format 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see NumberFormat 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class DecimalFormat extends NumberFormat { 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 864413376551465018L; 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private transient boolean parseBigDecimal = false; 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private transient DecimalFormatSymbols symbols; 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 554820dd9b89746b3e3005bd5d23176cde1a69048b7Elliott Hughes private transient NativeDecimalFormat dform; 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DecimalFormat} for formatting and parsing numbers 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for the default locale. 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DecimalFormat() { 561f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // BEGIN android-changed: reduce duplication. 5629b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson Locale locale = Locale.getDefault(); 563f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes this.symbols = new DecimalFormatSymbols(locale); 564f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes LocaleData localeData = com.ibm.icu4jni.util.Resources.getLocaleData(locale); 5655d593ea1361bd7c5ef3353b66d63ac64e95d9d41Elliott Hughes initNative(localeData.numberPattern); 5669b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson // END android-changed 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DecimalFormat} using the specified non-localized 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * pattern and the {@code DecimalFormatSymbols} for the default Locale. 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param pattern 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the non-localized pattern. 5759b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws IllegalArgumentException 5769b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if the pattern cannot be parsed. 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DecimalFormat(String pattern) { 579f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // BEGIN android-changed: reduce duplication. 580f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes this(pattern, Locale.getDefault()); 58164e410fa8b4771a8749f899134b4e08c2fd49e3cElliott Hughes // END android-changed 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DecimalFormat} using the specified non-localized 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * pattern and {@code DecimalFormatSymbols}. 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param pattern 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the non-localized pattern. 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the DecimalFormatSymbols. 5929b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws IllegalArgumentException 5939b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if the pattern cannot be parsed. 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DecimalFormat(String pattern, DecimalFormatSymbols value) { 596f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // BEGIN android-changed: reduce duplication. 597f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes this.symbols = (DecimalFormatSymbols) value.clone(); 5985d593ea1361bd7c5ef3353b66d63ac64e95d9d41Elliott Hughes initNative(pattern); 59964e410fa8b4771a8749f899134b4e08c2fd49e3cElliott Hughes // END android-changed 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 602a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes // BEGIN android-added: used by NumberFormat.getInstance because cloning DecimalFormatSymbols is slow. 603a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes DecimalFormat(String pattern, Locale locale) { 604a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes this.symbols = new DecimalFormatSymbols(locale); 6055d593ea1361bd7c5ef3353b66d63ac64e95d9d41Elliott Hughes initNative(pattern); 606f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes } 607f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // END android-added 608a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes 609f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // BEGIN android-changed: reduce duplication. 6105d593ea1361bd7c5ef3353b66d63ac64e95d9d41Elliott Hughes private void initNative(String pattern) { 611f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes try { 6125d593ea1361bd7c5ef3353b66d63ac64e95d9d41Elliott Hughes this.dform = new NativeDecimalFormat(pattern, symbols); 613f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes } catch (IllegalArgumentException ex) { 614f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes throw new IllegalArgumentException(pattern); 615f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes } 616a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes super.setMaximumFractionDigits(dform.getMaximumFractionDigits()); 617a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes super.setMaximumIntegerDigits(dform.getMaximumIntegerDigits()); 618a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes super.setMinimumFractionDigits(dform.getMinimumFractionDigits()); 619a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes super.setMinimumIntegerDigits(dform.getMinimumIntegerDigits()); 620a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes } 621a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes // END android-added 622a05602fd81ff398fd6381390a0886608fec5f95cElliott Hughes 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Changes the pattern of this decimal format to the specified pattern which 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * uses localized pattern characters. 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param pattern 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the localized pattern. 6299b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws IllegalArgumentException 6309b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if the pattern cannot be parsed. 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applyLocalizedPattern(String pattern) { 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.applyLocalizedPattern(pattern); 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Changes the pattern of this decimal format to the specified pattern which 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * uses non-localized pattern characters. 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param pattern 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the non-localized pattern. 6429b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws IllegalArgumentException 6439b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if the pattern cannot be parsed. 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void applyPattern(String pattern) { 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.applyPattern(pattern); 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a new instance of {@code DecimalFormat} with the same pattern and 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * properties as this decimal format. 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a shallow copy of this decimal format. 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.lang.Cloneable 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DecimalFormat clone = (DecimalFormat) super.clone(); 659820dd9b89746b3e3005bd5d23176cde1a69048b7Elliott Hughes clone.dform = (NativeDecimalFormat) dform.clone(); 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone.symbols = (DecimalFormatSymbols) symbols.clone(); 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return clone; 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the specified object to this decimal format and indicates if 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * they are equal. In order to be equal, {@code object} must be an instance 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of {@code DecimalFormat} with the same pattern and properties. 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare with this object. 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the specified object is equal to this decimal 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format; {@code false} otherwise. 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #hashCode 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object object) { 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this == object) { 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(object instanceof DecimalFormat)) { 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 683f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes DecimalFormat other = (DecimalFormat) object; 684f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes return (this.dform == null ? other.dform == null : this.dform.equals(other.dform)) && 685f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes getDecimalFormatSymbols().equals(other.getDecimalFormatSymbols()); 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified object using the rules of this decimal format and 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns an {@code AttributedCharacterIterator} with the formatted number 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and attributes. 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to format. 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an AttributedCharacterIterator with the formatted number and 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * attributes. 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code object} cannot be formatted by this format. 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code object} is {@code null}. 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public AttributedCharacterIterator formatToCharacterIterator(Object object) { 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object == null) { 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException(); 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.formatToCharacterIterator(object); 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 711d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes public StringBuffer format(double value, StringBuffer buffer, FieldPosition position) { 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.format(value, buffer, position); 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 716d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes public StringBuffer format(long value, StringBuffer buffer, FieldPosition position) { 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.format(value, buffer, position); 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 721d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes public final StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos) { 722d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes if (number instanceof BigInteger) { 723d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes BigInteger bigInteger = (BigInteger) number; 724d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes if (bigInteger.bitLength() < 64) { 725d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes return dform.format(bigInteger.longValue(), toAppendTo, pos); 726d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes } else { 727d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes return dform.formatBigInteger(bigInteger, toAppendTo, pos); 728d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes } 729d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes } else if (number instanceof BigDecimal) { 730d7e81f7408fb84307d7792b7e3ab8c5a510b294bElliott Hughes return dform.formatBigDecimal((BigDecimal) number, toAppendTo, pos); 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.format(number, toAppendTo, pos); 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code DecimalFormatSymbols} used by this decimal format. 737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a copy of the {@code DecimalFormatSymbols} used by this decimal 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format. 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DecimalFormatSymbols getDecimalFormatSymbols() { 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (DecimalFormatSymbols) symbols.clone(); 743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the currency used by this decimal format. 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the currency used by this decimal format. 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see DecimalFormatSymbols#getCurrency() 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Currency getCurrency() { 7535d593ea1361bd7c5ef3353b66d63ac64e95d9d41Elliott Hughes return symbols.getCurrency(); 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the number of digits grouped together by the grouping separator. 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This only allows to get the primary grouping size. There is no API to get 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the secondary grouping size. 7609b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of digits grouped together. 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getGroupingSize() { 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.getGroupingSize(); 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the multiplier which is applied to the number before formatting 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or after parsing. 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the multiplier. 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMultiplier() { 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.getMultiplier(); 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the prefix which is formatted or parsed before a negative number. 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the negative prefix. 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getNegativePrefix() { 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.getNegativePrefix(); 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the suffix which is formatted or parsed after a negative number. 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the negative suffix. 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getNegativeSuffix() { 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.getNegativeSuffix(); 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the prefix which is formatted or parsed before a positive number. 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the positive prefix. 799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getPositivePrefix() { 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.getPositivePrefix(); 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the suffix which is formatted or parsed after a positive number. 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the positive suffix. 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getPositiveSuffix() { 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.getPositiveSuffix(); 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.hashCode(); 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether the decimal separator is shown when there are no 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fractional digits. 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the decimal separator should always be formatted; 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} otherwise. 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isDecimalSeparatorAlwaysShown() { 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.isDecimalSeparatorAlwaysShown(); 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This value indicates whether the return object of the parse operation is 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of type {@code BigDecimal}. This value defaults to {@code false}. 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if parse always returns {@code BigDecimals}, 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} if the type of the result is {@code Long} or 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Double}. 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isParseBigDecimal() { 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this.parseBigDecimal; 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the flag that indicates whether numbers will be parsed as integers. 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * When this decimal format is used for parsing and this value is set to 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true}, then the resulting numbers will be of type 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code java.lang.Integer}. Special cases are NaN, positive and negative 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * infinity, which are still returned as {@code java.lang.Double}. 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8489b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} that the resulting numbers of parse operations 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will be of type {@code java.lang.Integer} except for the 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * special cases described above. 853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setParseIntegerOnly(boolean value) { 856820dd9b89746b3e3005bd5d23176cde1a69048b7Elliott Hughes // In this implementation, NativeDecimalFormat is wrapped to 8579b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson // fulfill most of the format and parse feature. And this method is 858820dd9b89746b3e3005bd5d23176cde1a69048b7Elliott Hughes // delegated to the wrapped instance of NativeDecimalFormat. 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setParseIntegerOnly(value); 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether parsing with this decimal format will only 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * return numbers of type {@code java.lang.Integer}. 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this {@code DecimalFormat}'s parse method only 867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns {@code java.lang.Integer}; {@code false} otherwise. 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isParseIntegerOnly() { 871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.isParseIntegerOnly(); 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final Double NEGATIVE_ZERO_DOUBLE = new Double(-0.0); 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses a {@code Long} or {@code Double} from the specified string 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * starting at the index specified by {@code position}. If the string is 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * successfully parsed then the index of the {@code ParsePosition} is 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * updated to the index following the parsed text. On error, the index is 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * unchanged and the error index of {@code ParsePosition} is set to the 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * index where the error occurred. 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to parse. 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param position 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * input/output parameter, specifies the start index in 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string} from where to start parsing. If parsing is 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * successful, it is updated with the index following the parsed 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * text; on error, the index is unchanged and the error index is 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set to the index where the error occurred. 892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Long} or {@code Double} resulting from the parse or 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} if there is an error. The result will be a 894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Long} if the parsed number is an integer in the range of a 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * long, otherwise the result is a {@code Double}. If 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code isParseBigDecimal} is {@code true} then it returns the 897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * result as a {@code BigDecimal}. 898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Number parse(String string, ParsePosition position) { 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Number number = dform.parse(string, position); 902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (null == number) { 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-removed 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if (this.isParseBigDecimal()) { 907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if (number instanceof Long) { 908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // return new BigDecimal(number.longValue()); 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } 910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if ((number instanceof Double) && !((Double) number).isInfinite() 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // && !((Double) number).isNaN()) { 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // return new BigDecimal(number.doubleValue()); 914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } 915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if (number instanceof BigInteger) { 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // return new BigDecimal(number.doubleValue()); 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } 918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if (number instanceof com.ibm.icu.math.BigDecimal) { 919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // return new BigDecimal(number.toString()); 920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // return number; 922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if ((number instanceof com.ibm.icu.math.BigDecimal) 924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // || (number instanceof BigInteger)) { 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // return new Double(number.doubleValue()); 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-removed 928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-added 929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.isParseBigDecimal()) { 930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (number instanceof Long) { 931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new BigDecimal(number.longValue()); 932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((number instanceof Double) && !((Double) number).isInfinite() 934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && !((Double) number).isNaN()) { 935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new BigDecimal(number.toString()); 937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (number instanceof BigInteger) { 939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new BigDecimal(number.toString()); 940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return number; 942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((number instanceof BigDecimal) || (number instanceof BigInteger)) { 944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new Double(number.doubleValue()); 945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-added 947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.isParseIntegerOnly() && number.equals(NEGATIVE_ZERO_DOUBLE)) { 949186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes return Long.valueOf(0); // android-changed 950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return number; 952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the {@code DecimalFormatSymbols} used by this decimal format. 957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code DecimalFormatSymbols} to set. 960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setDecimalFormatSymbols(DecimalFormatSymbols value) { 962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (value != null) { 963f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // BEGIN android-changed: the Java object is canonical, and we copy down to native code. 964f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes this.symbols = (DecimalFormatSymbols) value.clone(); 965f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes dform.setDecimalFormatSymbols(this.symbols); 966f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // END android-changed 967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the currency used by this decimal format. The min and max fraction 972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * digits remain the same. 973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param currency 975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the currency this {@code DecimalFormat} should use. 976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see DecimalFormatSymbols#setCurrency(Currency) 977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setCurrency(Currency currency) { 980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-changed 981f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes dform.setCurrency(Currency.getInstance(currency.getCurrencyCode())); 982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-changed 983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project symbols.setCurrency(currency); 984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets whether the decimal separator is shown when there are no fractional 988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * digits. 989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} if the decimal separator should always be 992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatted; {@code false} otherwise. 993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setDecimalSeparatorAlwaysShown(boolean value) { 995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setDecimalSeparatorAlwaysShown(value); 996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the number of digits grouped together by the grouping separator. 1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This only allows to set the primary grouping size; the secondary grouping 1001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * size can only be set with a pattern. 10029b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of digits grouped together. 1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setGroupingSize(int value) { 1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setGroupingSize(value); 1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets whether or not grouping will be used in this format. Grouping 1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * affects both parsing and formatting. 1013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 1015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} if grouping is used; {@code false} otherwise. 1016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setGroupingUsed(boolean value) { 1019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setGroupingUsed(value); 1020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether grouping will be used in this format. 1024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if grouping is used; {@code false} otherwise. 1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isGroupingUsed() { 1029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.isGroupingUsed(); 1030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1033f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * Sets the maximum number of digits after the decimal point. 1034f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * If the value passed is negative then it is replaced by 0. 1035f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * Regardless of this setting, no more than 340 digits will be used. 1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1037f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * @param value the maximum number of fraction digits. 1038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMaximumFractionDigits(int value) { 1041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setMaximumFractionDigits(value); 1042f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes dform.setMaximumFractionDigits(getMaximumFractionDigits()); 1043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1046f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * Sets the maximum number of digits before the decimal point. 1047f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * If the value passed is negative then it is replaced by 0. 1048f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * Regardless of this setting, no more than 309 digits will be used. 1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1050f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * @param value the maximum number of integer digits. 1051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMaximumIntegerDigits(int value) { 1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setMaximumIntegerDigits(value); 1055f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes dform.setMaximumIntegerDigits(getMaximumIntegerDigits()); 1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1059f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * Sets the minimum number of digits after the decimal point. 1060f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * If the value passed is negative then it is replaced by 0. 1061f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * Regardless of this setting, no more than 340 digits will be used. 1062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1063f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * @param value the minimum number of fraction digits. 1064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMinimumFractionDigits(int value) { 1067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setMinimumFractionDigits(value); 1068f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes dform.setMinimumFractionDigits(getMinimumFractionDigits()); 1069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1072f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * Sets the minimum number of digits before the decimal point. 1073f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * If the value passed is negative then it is replaced by 0. 1074f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * Regardless of this setting, no more than 309 digits will be used. 1075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1076f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes * @param value the minimum number of integer digits. 1077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMinimumIntegerDigits(int value) { 1080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setMinimumIntegerDigits(value); 1081f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes dform.setMinimumIntegerDigits(getMinimumIntegerDigits()); 1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the multiplier which is applied to the number before formatting or 1086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * after parsing. 1087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 1089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the multiplier. 1090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMultiplier(int value) { 1092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setMultiplier(value); 1093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the prefix which is formatted or parsed before a negative number. 1097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 1099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the negative prefix. 1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setNegativePrefix(String value) { 1102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setNegativePrefix(value); 1103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the suffix which is formatted or parsed after a negative number. 1107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the negative suffix. 1110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setNegativeSuffix(String value) { 1112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setNegativeSuffix(value); 1113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the prefix which is formatted or parsed before a positive number. 1117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 1119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the positive prefix. 1120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setPositivePrefix(String value) { 1122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setPositivePrefix(value); 1123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the suffix which is formatted or parsed after a positive number. 1127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 1129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the positive suffix. 1130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setPositiveSuffix(String value) { 1132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setPositiveSuffix(value); 1133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the behaviour of the parse method. If set to {@code true} then all 1137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the returned objects will be of type {@code BigDecimal}. 1138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newValue 1140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} if all the returned objects should be of type 1141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code BigDecimal}; {@code false} otherwise. 1142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setParseBigDecimal(boolean newValue) { 1144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.parseBigDecimal = newValue; 1145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the pattern of this decimal format using localized pattern 1149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * characters. 1150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the localized pattern. 1152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toLocalizedPattern() { 1154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.toLocalizedPattern(); 1155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the pattern of this decimal format using non-localized pattern 1159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * characters. 1160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-localized pattern. 1162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toPattern() { 1164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dform.toPattern(); 1165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // the fields list to be serialized 1168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final ObjectStreamField[] serialPersistentFields = { 1169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("positivePrefix", String.class), //$NON-NLS-1$ 1170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("positiveSuffix", String.class), //$NON-NLS-1$ 1171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("negativePrefix", String.class), //$NON-NLS-1$ 1172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("negativeSuffix", String.class), //$NON-NLS-1$ 1173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("posPrefixPattern", String.class), //$NON-NLS-1$ 1174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("posSuffixPattern", String.class), //$NON-NLS-1$ 1175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("negPrefixPattern", String.class), //$NON-NLS-1$ 1176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("negSuffixPattern", String.class), //$NON-NLS-1$ 1177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("multiplier", int.class), //$NON-NLS-1$ 1178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("groupingSize", byte.class), //$NON-NLS-1$ 1179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-added 1180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("groupingUsed", boolean.class), //$NON-NLS-1$ 1181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-added 1182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("decimalSeparatorAlwaysShown", boolean.class), //$NON-NLS-1$ 1183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("parseBigDecimal", boolean.class), //$NON-NLS-1$ 1184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("symbols", DecimalFormatSymbols.class), //$NON-NLS-1$ 1185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("useExponentialNotation", boolean.class), //$NON-NLS-1$ 1186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("minExponentDigits", byte.class), //$NON-NLS-1$ 1187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("maximumIntegerDigits", int.class), //$NON-NLS-1$ 1188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("minimumIntegerDigits", int.class), //$NON-NLS-1$ 1189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("maximumFractionDigits", int.class), //$NON-NLS-1$ 1190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("minimumFractionDigits", int.class), //$NON-NLS-1$ 1191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ObjectStreamField("serialVersionOnStream", int.class), }; //$NON-NLS-1$ 1192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes serialized fields following serialized forms specified by Java 1195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specification. 1196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param stream 1198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the output stream to write serialized bytes 1199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 1200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if some I/O error occurs 1201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClassNotFoundException 1202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 12039b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson @SuppressWarnings("nls") 1204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException, 1205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ClassNotFoundException { 1206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectOutputStream.PutField fields = stream.putFields(); 12079b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("positivePrefix", dform.getPositivePrefix()); 12089b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("positiveSuffix", dform.getPositiveSuffix()); 12099b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("negativePrefix", dform.getNegativePrefix()); 12109b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("negativeSuffix", dform.getNegativeSuffix()); 1211186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes fields.put("posPrefixPattern", (String) null); 1212186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes fields.put("posSuffixPattern", (String) null); 1213186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes fields.put("negPrefixPattern", (String) null); 1214186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes fields.put("negSuffixPattern", (String) null); 12159b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("multiplier", dform.getMultiplier()); 12169b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("groupingSize", (byte) dform.getGroupingSize()); 1217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-added 12189b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("groupingUsed", dform.isGroupingUsed()); 1219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-added 12209b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("decimalSeparatorAlwaysShown", dform 1221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isDecimalSeparatorAlwaysShown()); 12229b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("parseBigDecimal", parseBigDecimal); 12239b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("symbols", symbols); 1224f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes fields.put("useExponentialNotation", false); 1225f8ba29b25f7fc2ef93ab39a8ac436c94d55b3984Elliott Hughes fields.put("minExponentDigits", (byte) 0); 12269b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("maximumIntegerDigits", dform.getMaximumIntegerDigits()); 12279b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("minimumIntegerDigits", dform.getMinimumIntegerDigits()); 12289b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("maximumFractionDigits", dform.getMaximumFractionDigits()); 12299b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson fields.put("minimumFractionDigits", dform.getMinimumFractionDigits()); 1230f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes fields.put("serialVersionOnStream", 3); 1231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.writeFields(); 1232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads serialized fields following serialized forms specified by Java 1236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specification. 1237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param stream 1239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the input stream to read serialized bytes 1240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 1241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if some I/O error occurs 1242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClassNotFoundException 1243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if some class of serialized objects or fields cannot be found 1244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 12459b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson @SuppressWarnings("nls") 1246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void readObject(ObjectInputStream stream) throws IOException, 1247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ClassNotFoundException { 1248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 124964e410fa8b4771a8749f899134b4e08c2fd49e3cElliott Hughes // BEGIN android-changed 1250186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes ObjectInputStream.GetField fields = stream.readFields(); 1251186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes this.symbols = (DecimalFormatSymbols) fields.get("symbols", null); 1252186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes 12535d593ea1361bd7c5ef3353b66d63ac64e95d9d41Elliott Hughes initNative(""); 1254186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes dform.setPositivePrefix((String) fields.get("positivePrefix", "")); 1255186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes dform.setPositiveSuffix((String) fields.get("positiveSuffix", "")); 1256186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes dform.setNegativePrefix((String) fields.get("negativePrefix", "-")); 1257186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes dform.setNegativeSuffix((String) fields.get("negativeSuffix", "")); 1258186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes dform.setMultiplier(fields.get("multiplier", 1)); 1259186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes dform.setGroupingSize(fields.get("groupingSize", (byte) 3)); 1260186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes dform.setGroupingUsed(fields.get("groupingUsed", true)); 1261186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes dform.setDecimalSeparatorAlwaysShown(fields.get("decimalSeparatorAlwaysShown", false)); 1262186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes 1263186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes final int maximumIntegerDigits = fields.get("maximumIntegerDigits", 309); 1264186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes final int minimumIntegerDigits = fields.get("minimumIntegerDigits", 309); 1265186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes final int maximumFractionDigits = fields.get("maximumFractionDigits", 340); 1266186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes final int minimumFractionDigits = fields.get("minimumFractionDigits", 340); 1267f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // BEGIN android-changed: tell ICU what we want, then ask it what we can have, and then 1268f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // set that in our Java object. This isn't RI-compatible, but then very little of our 1269f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // behavior in this area is, and it's not obvious how we can second-guess ICU (or tell 1270f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // it to just do exactly what we ask). We only need to do this with maximumIntegerDigits 1271f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes // because ICU doesn't seem to have its own ideas about the other options. 1272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dform.setMaximumIntegerDigits(maximumIntegerDigits); 1273f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes super.setMaximumIntegerDigits(dform.getMaximumIntegerDigits()); 1274186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes 1275186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes setMinimumIntegerDigits(minimumIntegerDigits); 1276f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes setMinimumFractionDigits(minimumFractionDigits); 1277f2d5062b67e57ef00ee81fec67480f0d58d66b50Elliott Hughes setMaximumFractionDigits(maximumFractionDigits); 1278186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes setParseBigDecimal(fields.get("parseBigDecimal", false)); 1279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1280186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes if (fields.get("serialVersionOnStream", 0) < 3) { 12819b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson setMaximumIntegerDigits(super.getMaximumIntegerDigits()); 1282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setMinimumIntegerDigits(super.getMinimumIntegerDigits()); 1283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setMaximumFractionDigits(super.getMaximumFractionDigits()); 1284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setMinimumFractionDigits(super.getMinimumFractionDigits()); 1285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1286186ae3b4b3ccad7baad8a33d59952263427ddda5Elliott Hughes // END android-changed 1287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 1289