欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java二进制、十进制单位转换,java二进制,最新版本:BinaryU

来源: javaer 分享于  点击 32723 次 点评:91

Java二进制、十进制单位转换,java二进制,最新版本:BinaryU


最新版本:BinaryUnit.javaDecimalUnit.java

[Java]代码

public static void main(String[] args) throws Throwable {    System.out.println(BinaryUnit.toHumanReadableString(Long.MAX_VALUE)); // 8Ei    System.out.println(DecimalUnit.toHumanReadableString(Long.MAX_VALUE)); // 9.2E    System.out.println(BinaryUnit.toHumanReadableString(            DecimalUnit.GIGAS.toUnits(500))); // 标称500G的硬盘其实只有465.7G}

DecimalUnit.java

package canghailan.util;import java.text.NumberFormat;/** * @author canghailan 2011-12-10 07:09 */public enum DecimalUnit {    UNITS("") {        public long toUnits(long s) { return s; }        public long toKilos(long s) { return s/(C1/C0); }        public long toMegas(long s) { return s/(C2/C0); }        public long toGigas(long s) { return s/(C3/C0); }        public long toTeras(long s) { return s/(C4/C0); }        public long toPetas(long s) { return s/(C5/C0); }        public long toExas(long s)  { return s/(C6/C0); }        public long convert(long s, DecimalUnit u) { return u.toUnits(s); }        public double toUnits(double s) { return s; }        public double toKilos(double s) { return s/(C1/C0); }        public double toMegas(double s) { return s/(C2/C0); }        public double toGigas(double s) { return s/(C3/C0); }        public double toTeras(double s) { return s/(C4/C0); }        public double toPetas(double s) { return s/(C5/C0); }        public double toExas(double s)  { return s/(C6/C0); }        public double convert(double s, DecimalUnit u) { return u.toUnits(s); }    },    KILOS("K") {        public long toUnits(long s) { return x(s, C1/C0, Long.MAX_VALUE/(C1/C0)); }        public long toKilos(long s) { return s; }        public long toMegas(long s) { return s/(C2/C1); }        public long toGigas(long s) { return s/(C3/C1); }        public long toTeras(long s) { return s/(C4/C1); }        public long toPetas(long s) { return s/(C5/C1); }        public long toExas(long s)  { return s/(C6/C1); }        public long convert(long s, DecimalUnit u) { return u.toKilos(s); }        public double toUnits(double s) { return x(s, C1/C0, Double.MAX_VALUE/(C1/C0)); }        public double toKilos(double s) { return s; }        public double toMegas(double s) { return s/(C2/C1); }        public double toGigas(double s) { return s/(C3/C1); }        public double toTeras(double s) { return s/(C4/C1); }        public double toPetas(double s) { return s/(C5/C1); }        public double toExas(double s)  { return s/(C6/C1); }        public double convert(double s, DecimalUnit u) { return u.toKilos(s); }    },    MEGAS("M") {        public long toUnits(long s) { return x(s, C2/C0, Long.MAX_VALUE/(C2/C0)); }        public long toKilos(long s) { return x(s, C2/C1, Long.MAX_VALUE/(C2/C1)); }        public long toMegas(long s) { return s; }        public long toGigas(long s) { return s/(C3/C2); }        public long toTeras(long s) { return s/(C4/C2); }        public long toPetas(long s) { return s/(C5/C2); }        public long toExas(long s)  { return s/(C6/C2); }        public long convert(long s, DecimalUnit u) { return u.toMegas(s); }        public double toUnits(double s) { return x(s, C2/C0, Double.MAX_VALUE/(C2/C0)); }        public double toKilos(double s) { return x(s, C2/C1, Double.MAX_VALUE/(C2/C1)); }        public double toMegas(double s) { return s; }        public double toGigas(double s) { return s/(C3/C2); }        public double toTeras(double s) { return s/(C4/C2); }        public double toPetas(double s) { return s/(C5/C2); }        public double toExas(double s)  { return s/(C6/C2); }        public double convert(double s, DecimalUnit u) { return u.toMegas(s); }    },    GIGAS("G") {        public long toUnits(long s) { return x(s, C3/C0, Long.MAX_VALUE/(C3/C0)); }        public long toKilos(long s) { return x(s, C3/C1, Long.MAX_VALUE/(C3/C1)); }        public long toMegas(long s) { return x(s, C3/C2, Long.MAX_VALUE/(C3/C2)); }        public long toGigas(long s) { return s; }        public long toTeras(long s) { return s/(C4/C3); }        public long toPetas(long s) { return s/(C5/C3); }        public long toExas(long s)  { return s/(C6/C3); }        public long convert(long s, DecimalUnit u) { return u.toGigas(s); }        public double toUnits(double s) { return x(s, C3/C0, Double.MAX_VALUE/(C3/C0)); }        public double toKilos(double s) { return x(s, C3/C1, Double.MAX_VALUE/(C3/C1)); }        public double toMegas(double s) { return x(s, C3/C2, Double.MAX_VALUE/(C3/C2)); }        public double toGigas(double s) { return s; }        public double toTeras(double s) { return s/(C4/C3); }        public double toPetas(double s) { return s/(C5/C3); }        public double toExas(double s)  { return s/(C6/C3); }        public double convert(double s, DecimalUnit u) { return u.toGigas(s); }    },    TERAS("T") {        public long toUnits(long s) { return x(s, C4/C0, Long.MAX_VALUE/(C4/C0)); }        public long toKilos(long s) { return x(s, C4/C1, Long.MAX_VALUE/(C4/C1)); }        public long toMegas(long s) { return x(s, C4/C2, Long.MAX_VALUE/(C4/C2)); }        public long toGigas(long s) { return x(s, C4/C3, Long.MAX_VALUE/(C4/C3)); }        public long toTeras(long s) { return s; }        public long toPetas(long s) { return s/(C5/C4); }        public long toExas(long s)  { return s/(C6/C4); }        public long convert(long s, DecimalUnit u) { return u.toTeras(s); }        public double toUnits(double s) { return x(s, C4/C0, Double.MAX_VALUE/(C4/C0)); }        public double toKilos(double s) { return x(s, C4/C1, Double.MAX_VALUE/(C4/C1)); }        public double toMegas(double s) { return x(s, C4/C2, Double.MAX_VALUE/(C4/C2)); }        public double toGigas(double s) { return x(s, C4/C3, Double.MAX_VALUE/(C4/C3)); }        public double toTeras(double s) { return s; }        public double toPetas(double s) { return s/(C5/C4); }        public double toExas(double s)  { return s/(C6/C4); }        public double convert(double s, DecimalUnit u) { return u.toTeras(s); }    },    PETAS("P") {        public long toUnits(long s) { return x(s, C5/C0, Long.MAX_VALUE/(C5/C0)); }        public long toKilos(long s) { return x(s, C5/C1, Long.MAX_VALUE/(C5/C1)); }        public long toMegas(long s) { return x(s, C5/C2, Long.MAX_VALUE/(C5/C2)); }        public long toGigas(long s) { return x(s, C5/C3, Long.MAX_VALUE/(C5/C3)); }        public long toTeras(long s) { return x(s, C5/C4, Long.MAX_VALUE/(C5/C4)); }        public long toPetas(long s) { return s; }        public long toExas(long s)  { return s/(C6/C5); }        public long convert(long s, DecimalUnit u) { return u.toPetas(s); }        public double toUnits(double s) { return x(s, C5/C0, Double.MAX_VALUE/(C5/C0)); }        public double toKilos(double s) { return x(s, C5/C1, Double.MAX_VALUE/(C5/C1)); }        public double toMegas(double s) { return x(s, C5/C2, Double.MAX_VALUE/(C5/C2)); }        public double toGigas(double s) { return x(s, C5/C3, Double.MAX_VALUE/(C5/C3)); }        public double toTeras(double s) { return x(s, C5/C4, Double.MAX_VALUE/(C5/C4)); }        public double toPetas(double s) { return s; }        public double toExas(double s)  { return s/(C6/C5); }        public double convert(double s, DecimalUnit u) { return u.toPetas(s); }    },    EXAS("E") {        public long toUnits(long s) { return x(s, C6/C0, Long.MAX_VALUE/(C6/C0)); }        public long toKilos(long s) { return x(s, C6/C1, Long.MAX_VALUE/(C6/C1)); }        public long toMegas(long s) { return x(s, C6/C2, Long.MAX_VALUE/(C6/C2)); }        public long toGigas(long s) { return x(s, C6/C3, Long.MAX_VALUE/(C6/C3)); }        public long toTeras(long s) { return x(s, C6/C4, Long.MAX_VALUE/(C6/C4)); }        public long toPetas(long s) { return x(s, C6/C5, Long.MAX_VALUE/(C6/C5)); }        public long toExas(long s)  { return s; }        public long convert(long s, DecimalUnit u) { return u.toExas(s); }        public double toUnits(double s) { return x(s, C6/C0, Double.MAX_VALUE/(C6/C0)); }        public double toKilos(double s) { return x(s, C6/C1, Double.MAX_VALUE/(C6/C1)); }        public double toMegas(double s) { return x(s, C6/C2, Double.MAX_VALUE/(C6/C2)); }        public double toGigas(double s) { return x(s, C6/C3, Double.MAX_VALUE/(C6/C3)); }        public double toTeras(double s) { return x(s, C6/C4, Double.MAX_VALUE/(C6/C4)); }        public double toPetas(double s) { return x(s, C6/C5, Double.MAX_VALUE/(C6/C5)); }        public double toExas(double s)  { return s; }        public double convert(double s, DecimalUnit u) { return u.toExas(s); }    };    private String symbol;    private DecimalUnit(String symbol) {        this.symbol = symbol;    }    public String toString() {        return symbol;    }    static final long C0 = 1L;    static final long C1 = C0 * 1000L;    static final long C2 = C1 * 1000L;    static final long C3 = C2 * 1000L;    static final long C4 = C3 * 1000L;    static final long C5 = C4 * 1000L;    static final long C6 = C5 * 1000L;    static long x(long s, long m, long over) {        if (s > over) return Long.MAX_VALUE;        if (s < -over) return Long.MIN_VALUE;        return s * m;    }    public long convert(long source, DecimalUnit sourceUnit) {        throw new AbstractMethodError();    }    public long toUnits(long s) {        throw new AbstractMethodError();    }    public long toKilos(long s) {        throw new AbstractMethodError();    }    public long toMegas(long s) {        throw new AbstractMethodError();    }    public long toGigas(long s) {        throw new AbstractMethodError();    }    public long toTeras(long s) {        throw new AbstractMethodError();    }    public long toPetas(long s) {        throw new AbstractMethodError();    }    public long toExas(long s) {        throw new AbstractMethodError();    }    static double x(double s, double m, double over) {        if (s > over) return Double.MAX_VALUE;        if (s < -over) return Double.MIN_VALUE;        return s * m;    }    public double convert(double source, DecimalUnit sourceUnit) {        throw new AbstractMethodError();    }    public double toUnits(double s) {        throw new AbstractMethodError();    }    public double toKilos(double s) {        throw new AbstractMethodError();    }    public double toMegas(double s) {        throw new AbstractMethodError();    }    public double toGigas(double s) {        throw new AbstractMethodError();    }    public double toTeras(double s) {        throw new AbstractMethodError();    }    public double toPetas(double s) {        throw new AbstractMethodError();    }    public double toExas(double s) {        throw new AbstractMethodError();    }    public static DecimalUnit getBestUnit(long s) {        if (s < C1) { return UNITS; }        if (s < C2) { return KILOS; }        if (s < C3) { return MEGAS; }        if (s < C4) { return GIGAS; }        if (s < C5) { return TERAS; }        if (s < C6) { return PETAS; }        return EXAS;    }    public static String toHumanReadableString(long s) {        DecimalUnit unit = getBestUnit(s);        if (unit == UNITS) {            return String.valueOf(s);        } else {            NumberFormat format = NumberFormat.getInstance();            format.setMaximumFractionDigits(1);            return format.format(unit.convert((double) s, UNITS)) + unit;        }    }}
相关栏目:

用户点评