Java二进制、十进制单位转换,java二进制,最新版本:BinaryU
分享于 点击 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; } }}
用户点评