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