home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- import java.util.Locale;
- import java.util.ResourceBundle;
-
- public class DecimalFormat extends NumberFormat {
- private transient DigitList digitList = new DigitList();
- private String positivePrefix = "";
- private String positiveSuffix = "";
- private String negativePrefix = "-";
- private String negativeSuffix = "";
- private int multiplier = 1;
- private byte groupingSize = 3;
- private boolean decimalSeparatorAlwaysShown = false;
- private DecimalFormatSymbols symbols = new DecimalFormatSymbols();
- private static final char patternZeroDigit = '0';
- private static final char patternGroupingSeparator = ',';
- private static final char patternDecimalSeparator = '.';
- private static final char patternPerMill = '‰';
- private static final char patternPercent = '%';
- private static final char patternDigit = '#';
- private static final char patternSeparator = ';';
-
- public DecimalFormat() {
- ResourceBundle var1 = ResourceBundle.getBundle("java.text.resources.LocaleElements", Locale.getDefault());
- String[] var2 = var1.getStringArray("NumberPatterns");
- this.applyPattern(var2[0], false);
- this.symbols = new DecimalFormatSymbols(Locale.getDefault());
- }
-
- public DecimalFormat(String var1) {
- this.applyPattern(var1, false);
- this.symbols = new DecimalFormatSymbols(Locale.getDefault());
- }
-
- public DecimalFormat(String var1, DecimalFormatSymbols var2) {
- this.applyPattern(var1, false);
- this.symbols = var2;
- }
-
- public StringBuffer format(double var1, StringBuffer var3, FieldPosition var4) {
- var4.beginIndex = var4.endIndex = 0;
- if (Double.isNaN(var1)) {
- var3.append(this.symbols.getNaN());
- } else {
- boolean var5 = var1 < (double)0.0F;
- if (!var5) {
- var3.append(this.positivePrefix);
- } else {
- var3.append(this.negativePrefix);
- var1 = -var1;
- }
-
- if (Double.isInfinite(var1)) {
- var3.append(this.symbols.getInfinity());
- } else {
- if (this.multiplier != 1) {
- var1 *= (double)this.multiplier;
- }
-
- this.digitList.set(var1, ((NumberFormat)this).getMaximumFractionDigits());
- this.appendNativeDigits(var3, var4);
- }
-
- if (!var5) {
- var3.append(this.positiveSuffix);
- } else {
- var3.append(this.negativeSuffix);
- }
- }
-
- return var3;
- }
-
- public StringBuffer format(long var1, StringBuffer var3, FieldPosition var4) {
- var4.beginIndex = var4.endIndex = 0;
- if (Double.isNaN((double)var1)) {
- var3.append(this.symbols.getNaN());
- } else {
- boolean var5 = var1 < 0L;
- if (!var5) {
- var3.append(this.positivePrefix);
- } else {
- var3.append(this.negativePrefix);
- var1 = -var1;
- }
-
- if (Double.isInfinite((double)var1)) {
- var3.append(this.symbols.getInfinity());
- } else {
- if (this.multiplier != 1) {
- var1 *= (long)this.multiplier;
- }
-
- this.digitList.set(var1);
- this.appendNativeDigits(var3, var4);
- }
-
- if (!var5) {
- var3.append(this.positiveSuffix);
- } else {
- var3.append(this.negativeSuffix);
- }
- }
-
- return var3;
- }
-
- public Number parse(String var1, ParsePosition var2) {
- int var3 = var2.index;
- if (var1.regionMatches(var3, this.symbols.getNaN(), 0, this.symbols.getNaN().length())) {
- var2.index = var3 + this.symbols.getNaN().length();
- return new Double(Double.NaN);
- } else {
- boolean var4 = var1.regionMatches(var3, this.positivePrefix, 0, this.positivePrefix.length());
- boolean var5 = var1.regionMatches(var3, this.negativePrefix, 0, this.negativePrefix.length());
- if (var4 && var5) {
- if (this.positivePrefix.length() > this.negativePrefix.length()) {
- var5 = false;
- } else if (this.positivePrefix.length() < this.negativePrefix.length()) {
- var4 = false;
- }
- }
-
- if (var4) {
- var3 += this.positivePrefix.length();
- } else {
- if (!var5) {
- return null;
- }
-
- var3 += this.negativePrefix.length();
- }
-
- double var6 = Double.NaN;
- long var8 = Long.MIN_VALUE;
- boolean var10 = true;
- if (var1.regionMatches(var3, this.symbols.getInfinity(), 0, this.symbols.getInfinity().length())) {
- var3 += this.symbols.getInfinity().length();
- this.digitList.decimalAt = var3;
- var6 = Double.POSITIVE_INFINITY;
- } else {
- this.digitList.count = 0;
- this.digitList.decimalAt = -1;
- int var11 = -1;
- int var12 = -1;
-
- boolean var13;
- for(var13 = false; var3 < var1.length(); ++var3) {
- char var14 = var1.charAt(var3);
- if (this.symbols.getZeroDigit() < var14 && var14 <= (char)(this.symbols.getZeroDigit() + 9)) {
- var11 = -1;
- this.digitList.decimalAt = var12;
- this.digitList.append(var14 - this.symbols.getZeroDigit() + 48);
- } else if (var14 == this.symbols.getZeroDigit()) {
- var13 = true;
- if (this.digitList.count != 0 || var12 != -1) {
- var11 = -1;
- this.digitList.decimalAt = var12;
- if (this.digitList.count != 0 || var12 != -1) {
- this.digitList.append(var14 - this.symbols.getZeroDigit() + 48);
- }
- }
- } else {
- if (this.digitList.decimalAt >= 0) {
- break;
- }
-
- if (var14 == this.symbols.getDecimalSeparator() && !((NumberFormat)this).isParseIntegerOnly()) {
- var11 = var3;
- var12 = this.digitList.count;
- } else {
- if (var14 != this.symbols.getGroupingSeparator() || !((NumberFormat)this).isGroupingUsed()) {
- break;
- }
-
- var11 = var3;
- }
- }
- }
-
- if (var11 != -1) {
- var3 = var11;
- }
-
- if (this.digitList.decimalAt == -1) {
- this.digitList.decimalAt = this.digitList.count;
- }
-
- if (this.digitList.decimalAt == this.digitList.count && this.digitList.count <= 19) {
- var10 = false;
- if (this.digitList.count == 19 && var5 && this.isLongMIN_VALUE(this.digitList)) {
- var8 = Long.MIN_VALUE;
- } else if (this.digitList.count == 0) {
- if (!var13) {
- return null;
- }
-
- var8 = 0L;
- } else {
- var8 = this.digitList.getLong();
- }
- } else {
- if (this.digitList.count == 0) {
- return null;
- }
-
- var6 = this.digitList.getDouble();
- }
- }
-
- if (var4) {
- var4 = var1.regionMatches(var3, this.positiveSuffix, 0, this.positiveSuffix.length());
- }
-
- if (var5) {
- var5 = var1.regionMatches(var3, this.negativeSuffix, 0, this.negativeSuffix.length());
- }
-
- if (!var4 && !var5) {
- return null;
- } else {
- if (var4 && var5) {
- if (this.positiveSuffix.length() > this.negativeSuffix.length()) {
- var5 = false;
- } else {
- if (this.positiveSuffix.length() >= this.negativeSuffix.length()) {
- return null;
- }
-
- var4 = false;
- }
- }
-
- if (var4 == var5) {
- return null;
- } else {
- if (this.multiplier != 1) {
- if (var10) {
- var6 /= (double)this.multiplier;
- } else {
- var6 = (double)var8 / (double)this.multiplier;
- var10 = true;
- }
- }
-
- if (var4) {
- var2.index = var3 + this.positiveSuffix.length();
- } else {
- var2.index = var3 + this.negativeSuffix.length();
- var6 = -var6;
- var8 = -var8;
- }
-
- if (var10) {
- return new Double(var6);
- } else {
- return (Number)(this.digitList.decimalAt != this.digitList.count || var8 < Long.MIN_VALUE && var8 > Long.MAX_VALUE ? new Double((double)var8) : new Long(var8));
- }
- }
- }
- }
- }
-
- public DecimalFormatSymbols getDecimalFormatSymbols() {
- try {
- return (DecimalFormatSymbols)this.symbols.clone();
- } catch (Exception var1) {
- return null;
- }
- }
-
- public void setDecimalFormatSymbols(DecimalFormatSymbols var1) {
- try {
- this.symbols = (DecimalFormatSymbols)var1.clone();
- } catch (Exception var2) {
- }
- }
-
- public String getPositivePrefix() {
- return this.positivePrefix;
- }
-
- public void setPositivePrefix(String var1) {
- this.positivePrefix = var1;
- }
-
- public String getNegativePrefix() {
- return this.negativePrefix;
- }
-
- public void setNegativePrefix(String var1) {
- this.negativePrefix = var1;
- }
-
- public String getPositiveSuffix() {
- return this.positiveSuffix;
- }
-
- public void setPositiveSuffix(String var1) {
- this.positiveSuffix = var1;
- }
-
- public String getNegativeSuffix() {
- return this.negativeSuffix;
- }
-
- public void setNegativeSuffix(String var1) {
- this.negativeSuffix = var1;
- }
-
- public int getMultiplier() {
- return this.multiplier;
- }
-
- public void setMultiplier(int var1) {
- this.multiplier = var1;
- }
-
- public int getGroupingSize() {
- return this.groupingSize;
- }
-
- public void setGroupingSize(int var1) {
- this.groupingSize = (byte)var1;
- }
-
- public boolean isDecimalSeparatorAlwaysShown() {
- return this.decimalSeparatorAlwaysShown;
- }
-
- public void setDecimalSeparatorAlwaysShown(boolean var1) {
- this.decimalSeparatorAlwaysShown = var1;
- }
-
- public Object clone() {
- try {
- DecimalFormat var1 = (DecimalFormat)super.clone();
- var1.symbols = (DecimalFormatSymbols)this.symbols.clone();
- return var1;
- } catch (Exception var2) {
- throw new InternalError();
- }
- }
-
- public boolean equals(Object var1) {
- if (!super.equals(var1)) {
- return false;
- } else {
- DecimalFormat var2 = (DecimalFormat)var1;
- return this.positivePrefix.equals(var2.positivePrefix) && this.positiveSuffix.equals(var2.positiveSuffix) && this.negativePrefix.equals(var2.negativePrefix) && this.negativeSuffix.equals(var2.negativeSuffix) && this.multiplier == var2.multiplier && this.groupingSize == var2.groupingSize && this.decimalSeparatorAlwaysShown == var2.decimalSeparatorAlwaysShown && this.symbols.equals(var2.symbols);
- }
- }
-
- public int hashCode() {
- return super.hashCode() * 37 + this.positivePrefix.hashCode();
- }
-
- public String toPattern() {
- return this.toPattern(false);
- }
-
- public String toLocalizedPattern() {
- return this.toPattern(true);
- }
-
- private String toPattern(boolean var1) {
- StringBuffer var2 = new StringBuffer();
-
- for(int var3 = 1; var3 >= 0; --var3) {
- if (var3 == 1) {
- var2.append(this.positivePrefix);
- } else {
- var2.append(this.negativePrefix);
- }
-
- int var4 = Math.max(this.groupingSize, ((NumberFormat)this).getMinimumIntegerDigits()) + 1;
-
- for(int var5 = var4; var5 > 0; --var5) {
- if (var5 == this.groupingSize) {
- var2.append(var1 ? this.symbols.getGroupingSeparator() : ',');
- }
-
- if (var5 <= ((NumberFormat)this).getMinimumIntegerDigits()) {
- var2.append(var1 ? this.symbols.getZeroDigit() : '0');
- } else {
- var2.append(var1 ? this.symbols.getDigit() : '#');
- }
- }
-
- if (((NumberFormat)this).getMaximumFractionDigits() > 0) {
- var2.append(var1 ? this.symbols.getDecimalSeparator() : '.');
- }
-
- for(int var6 = 0; var6 < ((NumberFormat)this).getMaximumFractionDigits(); ++var6) {
- if (var6 < ((NumberFormat)this).getMinimumFractionDigits()) {
- var2.append(var1 ? this.symbols.getZeroDigit() : '0');
- } else {
- var2.append(var1 ? this.symbols.getDigit() : '#');
- }
- }
-
- if (var3 == 1) {
- var2.append(this.positiveSuffix);
- if (this.negativeSuffix.equals(this.positiveSuffix) && this.negativePrefix.equals(this.symbols.getMinusSign() + this.positivePrefix)) {
- break;
- }
-
- var2.append(var1 ? this.symbols.getPatternSeparator() : ';');
- } else {
- var2.append(this.negativeSuffix);
- }
- }
-
- return var2.toString();
- }
-
- public void applyPattern(String var1) {
- this.applyPattern(var1, false);
- }
-
- public void applyLocalizedPattern(String var1) {
- this.applyPattern(var1, true);
- }
-
- private void applyPattern(String var1, boolean var2) {
- int var3 = 0;
- boolean var4 = false;
- boolean var5 = false;
-
- for(int var6 = 1; var6 >= 0 && var3 < var1.length(); --var6) {
- StringBuffer var7 = new StringBuffer();
- StringBuffer var8 = new StringBuffer();
- byte var9 = 0;
- byte var10 = 0;
- byte var11 = 0;
- byte var12 = 0;
- short var13 = 1;
- boolean var14 = false;
- boolean var15 = false;
- byte var16 = 0;
- char var17 = '0';
- char var18 = ',';
- char var19 = '.';
- char var20 = '%';
- char var21 = 8240;
- char var22 = '#';
- char var23 = ';';
- if (var2) {
- var17 = this.symbols.getZeroDigit();
- var18 = this.symbols.getGroupingSeparator();
- var19 = this.symbols.getDecimalSeparator();
- var20 = this.symbols.getPercent();
- var21 = this.symbols.getPerMill();
- var22 = this.symbols.getDigit();
- var23 = this.symbols.getPatternSeparator();
- }
-
- for(; var3 < var1.length(); ++var3) {
- char var24 = var1.charAt(var3);
- if (var4) {
- if (var24 == '\'') {
- var4 = false;
- } else if (var9 <= 0) {
- var7.append(var24);
- } else {
- var8.append(var24);
- }
- } else if (var24 == '\'') {
- var4 = true;
- } else {
- if (var24 == var23) {
- ++var3;
- break;
- }
-
- if (!var15) {
- if (var24 == var22) {
- ++var9;
- if (var10 > 0) {
- throw new IllegalArgumentException();
- }
-
- if (var14) {
- ++var16;
- }
- } else if (var24 == var17) {
- ++var10;
- ++var9;
- if (var14) {
- ++var16;
- }
- } else if (var24 == var18) {
- var14 = true;
- var16 = 0;
- } else if (var24 == var19) {
- if (var15) {
- throw new IllegalArgumentException();
- }
-
- var15 = true;
- } else if (var9 > 0) {
- if (var15) {
- throw new IllegalArgumentException();
- }
-
- var15 = true;
- if (var24 == var20) {
- var8.append(this.symbols.getPercent());
- var13 = 100;
- } else if (var24 == var21) {
- var8.append(this.symbols.getPerMill());
- var13 = 1000;
- } else {
- var8.append(var24);
- }
- } else {
- var7.append(var24);
- }
- } else if (var24 == var22) {
- ++var11;
- } else if (var24 == var17) {
- ++var12;
- ++var11;
- } else if (var24 == var20) {
- var8.append(this.symbols.getPercent());
- var13 = 100;
- } else if (var24 == var21) {
- var8.append(this.symbols.getPerMill());
- var13 = 1000;
- } else {
- var8.append(var24);
- }
- }
- }
-
- if (var6 == 1) {
- this.positivePrefix = var7.toString();
- this.positiveSuffix = var8.toString();
- this.negativePrefix = this.positivePrefix;
- this.negativeSuffix = this.positiveSuffix;
- ((NumberFormat)this).setMaximumIntegerDigits(127);
- ((NumberFormat)this).setMinimumIntegerDigits(var10);
- ((NumberFormat)this).setMaximumFractionDigits(var11);
- ((NumberFormat)this).setMinimumFractionDigits(var12);
- ((NumberFormat)this).setGroupingUsed(var14);
- var15 = false;
- this.setDecimalSeparatorAlwaysShown(var15);
- this.groupingSize = var16;
- this.multiplier = var13;
- } else {
- this.negativePrefix = var7.toString();
- this.negativeSuffix = var8.toString();
- var5 = true;
- }
- }
-
- if (!var5 || this.negativePrefix.equals(this.positivePrefix) && this.negativeSuffix.equals(this.positiveSuffix)) {
- this.negativeSuffix = this.positiveSuffix;
- this.negativePrefix = this.symbols.getMinusSign() + this.negativePrefix;
- }
-
- }
-
- private void appendNativeDigits(StringBuffer var1, FieldPosition var2) {
- int var3 = this.digitList.decimalAt;
- if (var2.field == 0) {
- var2.beginIndex = var1.length();
- }
-
- int var4 = 0;
- int var5 = Math.max(((NumberFormat)this).getMinimumIntegerDigits(), Math.min(var3 - var4, ((NumberFormat)this).getMaximumIntegerDigits()));
-
- for(int var6 = var5; var6 > 0; --var6) {
- if (var6 <= var3 - var4 && var3 - var6 < this.digitList.count) {
- var1.append((char)(this.digitList.digits[var3 - var6] - 48 + this.symbols.getZeroDigit()));
- } else {
- var1.append(this.symbols.getZeroDigit());
- }
-
- if (((NumberFormat)this).isGroupingUsed() && (var6 - 1) % this.groupingSize == 0 && var6 != 1) {
- var1.append(this.symbols.getGroupingSeparator());
- }
- }
-
- if (var2.field == 0) {
- var2.endIndex = var1.length();
- }
-
- var4 = var3;
- int var8 = this.digitList.count;
- var5 = Math.max(((NumberFormat)this).getMinimumFractionDigits(), Math.min(var8 - var3, ((NumberFormat)this).getMaximumFractionDigits()));
- if (this.decimalSeparatorAlwaysShown || var5 > 0) {
- var1.append(this.symbols.getDecimalSeparator());
- if (var2.field == 1) {
- var2.beginIndex = var1.length();
- }
-
- for(int var7 = 0; var7 < var5; ++var7) {
- if (var7 >= var8 - var4) {
- var1.append(this.symbols.getZeroDigit());
- } else {
- var1.append((char)(this.digitList.digits[var4 + var7] - 48 + this.symbols.getZeroDigit()));
- }
- }
-
- if (var2.field == 1) {
- var2.endIndex = var1.length();
- }
- }
-
- }
-
- private boolean isSpecialChar(char var1) {
- return var1 == '0' || var1 == ',' || var1 == '.' || var1 == '%' || var1 == 8240 || var1 == '#' || var1 == ';';
- }
-
- private boolean isLongMIN_VALUE(DigitList var1) {
- StringBuffer var2 = new StringBuffer(var1.count + 1);
- var2.append('-');
-
- for(int var3 = 0; var3 < var1.count; ++var3) {
- var2.append((char)var1.digits[var3]);
- }
-
- return var2.toString().regionMatches(false, 0, Long.toString(Long.MIN_VALUE), 0, var1.count + 1);
- }
- }
-