public String format(boolean positive, int f1, int f2, double f3) {
            if (f1 < 0 || f2 < 0 || f3 < 0) {
                throw new IllegalArgumentException("Can't be negative");
            }
            if (Double.isNaN(f3)) {
                return null;
            }
            int f3i = (int) f3;
            int pos = 0;
            if (useSign) {
                char sgnChar = positive ? '+' : '-';
                buf[pos++] = sgnChar;
            }
            buf[pos++] = digitsLeading[(f1 / 10) % 10];
            buf[pos++] = digits0[f1 % 10];
            buf[pos++] = ':';
            buf[pos++] = digits0[(f2 / 10) % 10];
            buf[pos++] = digits0[f2 % 10];
            buf[pos++] = ':';
            buf[pos++] = digits0[(f3i / 10) % 10];
            buf[pos++] = digits0[f3i % 10];
            if (dp3 > 0) {
                buf[pos++] = '.';
                for (int i = 0; i < dp3; i++) {
                    f3 = f3 * 10.0;
                    buf[pos++] = digits0[((int) f3) % 10];
                }
            }
            return new String(buf);
        }