X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Futil%2FFormat.java;h=0f12eb833a6973565eae6804d73d3c9fcc9115d0;hb=e7921fdc9d6ab87ef91bb7781dd7d9316e671e3f;hp=712198547eb03dc64ec003455aa957410866310c;hpb=1e5b6995c96364c79329e618f7933caf177b353e;p=jalview.git diff --git a/src/jalview/util/Format.java b/src/jalview/util/Format.java index 7121985..0f12eb8 100755 --- a/src/jalview/util/Format.java +++ b/src/jalview/util/Format.java @@ -26,11 +26,16 @@ */ package jalview.util; +import java.util.Arrays; + /** - * DOCUMENT ME! + * A utility class that provides a variety of formatting methods. + * + * Principle method {@code format} formats the number following printf + * conventions. Main limitation: Can only handle one format parameter at a time + * Use multiple Format objects to format more than one number * - * @author $author$ - * @version $Revision$ + * @author unknown */ public class Format { @@ -57,12 +62,59 @@ public class Format private final String formatString; /** - * Creates a new Format object. + * Creates a new Format object given a format descriptor, which follows printf + * conventions The string has a prefix, a format code and a suffix. The prefix + * and suffix become part of the formatted output. The format code directs the + * formatting of the (single) parameter to be formatted. The code has the + * following structure + * * * @param s - * DOCUMENT ME! + * the format descriptor */ - public Format(String s) + public Format(final String s) { formatString = s; width = 0; @@ -212,63 +264,11 @@ public class Format } /** - * Formats the number following printf conventions. Main limitation: Can only - * handle one format parameter at a time Use multiple Format objects to format - * more than one number - * - * @param s - * the format string following printf conventions The string has a - * prefix, a format code and a suffix. The prefix and suffix become - * part of the formatted output. The format code directs the - * formatting of the (single) parameter to be formatted. The code has - * the following structure - * - * @exception IllegalArgumentException - * if bad format + * Returns a 6 character string consisting of the hex values of the colour's + * rgb values (left padded with zeroes if necessary) * + * @param color + * @return */ public static String getHexString(java.awt.Color color) { @@ -664,30 +664,22 @@ public class Format } /** - * DOCUMENT ME! + * Returns a string consisting of n repeats of character c * * @param c - * DOCUMENT ME! * @param n - * DOCUMENT ME! * - * @return DOCUMENT ME! + * @return */ - private static String repeat(char c, int n) + static String repeat(char c, int n) { if (n <= 0) { return ""; } - - StringBuffer s = new StringBuffer(n); - - for (int i = 0; i < n; i++) - { - s.append(c); - } - - return s.toString(); + char[] chars = new char[n]; + Arrays.fill(chars, c); + return new String(chars); } /** @@ -796,8 +788,8 @@ public class Format { w = width; } - else if (((fmt == 'd') || (fmt == 'i') || (fmt == 'x') || (fmt == 'X') || (fmt == 'o')) - && (precision > 0)) + else if (((fmt == 'd') || (fmt == 'i') || (fmt == 'x') || (fmt == 'X') + || (fmt == 'o')) && (precision > 0)) { w = precision; } @@ -839,7 +831,8 @@ public class Format double factor = 1; String leading_zeroes = ""; - for (int i = 1; (i <= precision) && (factor <= 0x7FFFFFFFFFFFFFFFL); i++) + for (int i = 1; (i <= precision) + && (factor <= 0x7FFFFFFFFFFFFFFFL); i++) { factor *= 10; leading_zeroes = leading_zeroes + "0"; @@ -890,21 +883,18 @@ public class Format String f = ""; int e = 0; double dd = d; - double factor = 1; if (d != 0) { while (dd > 10) { e++; - factor /= 10; dd = dd / 10; } while (dd < 1) { e--; - factor *= 10; dd = dd * 10; } } @@ -914,8 +904,7 @@ public class Format return fixed_format(d); } - d = d * factor; - f = f + fixed_format(d); + f = f + fixed_format(dd); if ((fmt == 'e') || (fmt == 'g')) { @@ -959,7 +948,27 @@ public class Format */ public static void appendPercentage(StringBuilder sb, float value, int dp) { - sb.append((int) value); + /* + * rounding first + */ + double d = value; + long factor = 1L; + for (int i = 0; i < dp; i++) + { + factor *= 10; + } + d *= factor; + d += 0.5; + + /* + * integer part + */ + value = (float) (d / factor); + sb.append((long) value); + + /* + * decimal places + */ if (dp > 0) { sb.append(".");