src/share/classes/java/util/Formatter.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 2805,2818 **** // Note that the following method uses an instance of the // default time zone (TimeZone.getDefaultRef(). cal = Calendar.getInstance(l == null ? Locale.US : l); cal.setTime((Date)arg); } else if (arg instanceof Calendar) { ! cal = (Calendar) ((Calendar)arg).clone(); cal.setLenient(true); } else if (arg instanceof TemporalAccessor) { ! print((TemporalAccessor)arg, c, l); return; } else { failConversion(c, arg); } // Use the provided locale so that invocations of --- 2805,2818 ---- // Note that the following method uses an instance of the // default time zone (TimeZone.getDefaultRef(). cal = Calendar.getInstance(l == null ? Locale.US : l); cal.setTime((Date)arg); } else if (arg instanceof Calendar) { ! cal = (Calendar) ((Calendar) arg).clone(); cal.setLenient(true); } else if (arg instanceof TemporalAccessor) { ! print((TemporalAccessor) arg, c, l); return; } else { failConversion(c, arg); } // Use the provided locale so that invocations of
*** 3240,3264 **** // Create a new FormattedFloatingDecimal with the desired // precision. int prec = (precision == -1 ? 6 : precision); FormattedFloatingDecimal fd ! = new FormattedFloatingDecimal(value, prec, FormattedFloatingDecimal.Form.SCIENTIFIC); ! char[] v = new char[MAX_FD_CHARS]; ! int len = fd.getChars(v); ! ! char[] mant = addZeros(mantissa(v, len), prec); // If the precision is zero and the '#' flag is set, add the // requested decimal point. if (f.contains(Flags.ALTERNATE) && (prec == 0)) mant = addDot(mant); char[] exp = (value == 0.0) ! ? new char[] {'+','0','0'} : exponent(v, len); int newW = width; if (width != -1) newW = adjustWidth(width - exp.length - 1, f, neg); localizedMagnitude(sb, mant, f, newW, l); --- 3240,3261 ---- // Create a new FormattedFloatingDecimal with the desired // precision. int prec = (precision == -1 ? 6 : precision); FormattedFloatingDecimal fd ! = FormattedFloatingDecimal.valueOf(value, prec, FormattedFloatingDecimal.Form.SCIENTIFIC); ! char[] mant = addZeros(fd.getMantissa(), prec); // If the precision is zero and the '#' flag is set, add the // requested decimal point. if (f.contains(Flags.ALTERNATE) && (prec == 0)) mant = addDot(mant); char[] exp = (value == 0.0) ! ? new char[] {'+','0','0'} : fd.getExponent(); int newW = width; if (width != -1) newW = adjustWidth(width - exp.length - 1, f, neg); localizedMagnitude(sb, mant, f, newW, l);
*** 3277,3295 **** // Create a new FormattedFloatingDecimal with the desired // precision. int prec = (precision == -1 ? 6 : precision); FormattedFloatingDecimal fd ! = new FormattedFloatingDecimal(value, prec, FormattedFloatingDecimal.Form.DECIMAL_FLOAT); ! // MAX_FD_CHARS + 1 (round?) ! char[] v = new char[MAX_FD_CHARS + 1 ! + Math.abs(fd.getExponent())]; ! int len = fd.getChars(v); ! ! char[] mant = addZeros(mantissa(v, len), prec); // If the precision is zero and the '#' flag is set, add the // requested decimal point. if (f.contains(Flags.ALTERNATE) && (prec == 0)) mant = addDot(mant); --- 3274,3287 ---- // Create a new FormattedFloatingDecimal with the desired // precision. int prec = (precision == -1 ? 6 : precision); FormattedFloatingDecimal fd ! = FormattedFloatingDecimal.valueOf(value, prec, FormattedFloatingDecimal.Form.DECIMAL_FLOAT); ! char[] mant = addZeros(fd.getMantissa(), prec); // If the precision is zero and the '#' flag is set, add the // requested decimal point. if (f.contains(Flags.ALTERNATE) && (prec == 0)) mant = addDot(mant);
*** 3304,3329 **** prec = 6; else if (precision == 0) prec = 1; FormattedFloatingDecimal fd ! = new FormattedFloatingDecimal(value, prec, FormattedFloatingDecimal.Form.GENERAL); ! // MAX_FD_CHARS + 1 (round?) ! char[] v = new char[MAX_FD_CHARS + 1 ! + Math.abs(fd.getExponent())]; ! int len = fd.getChars(v); ! ! char[] exp = exponent(v, len); if (exp != null) { prec -= 1; } else { prec = prec - (value == 0 ? 0 : fd.getExponentRounded()) - 1; } ! char[] mant = addZeros(mantissa(v, len), prec); // If the precision is zero and the '#' flag is set, add the // requested decimal point. if (f.contains(Flags.ALTERNATE) && (prec == 0)) mant = addDot(mant); --- 3296,3316 ---- prec = 6; else if (precision == 0) prec = 1; FormattedFloatingDecimal fd ! = FormattedFloatingDecimal.valueOf(value, prec, FormattedFloatingDecimal.Form.GENERAL); ! char[] exp = fd.getExponent(); if (exp != null) { prec -= 1; } else { prec = prec - (value == 0 ? 0 : fd.getExponentRounded()) - 1; } ! char[] mant = addZeros(fd.getMantissa(), prec); // If the precision is zero and the '#' flag is set, add the // requested decimal point. if (f.contains(Flags.ALTERNATE) && (prec == 0)) mant = addDot(mant);
*** 3378,3411 **** sb.append(upper ? 'P' : 'p'); sb.append(s.substring(idx+1)); } } - private char[] mantissa(char[] v, int len) { - int i; - for (i = 0; i < len; i++) { - if (v[i] == 'e') - break; - } - char[] tmp = new char[i]; - System.arraycopy(v, 0, tmp, 0, i); - return tmp; - } - - private char[] exponent(char[] v, int len) { - int i; - for (i = len - 1; i >= 0; i--) { - if (v[i] == 'e') - break; - } - if (i == -1) - return null; - char[] tmp = new char[len - i - 1]; - System.arraycopy(v, i + 1, tmp, 0, len - i - 1); - return tmp; - } - // Add zeros to the requested precision. private char[] addZeros(char[] v, int prec) { // Look for the dot. If we don't find one, the we'll need to add // it before we add the zeros. int i; --- 3365,3374 ----