import java.math.BigDecimal; public enum RmbUnit { FEN{ public String toFen(String amt) { BigDecimal bigD=new BigDecimal(amt).stripTrailingZeros(); return bigD.divide(C1.divide(C1)).stripTrailingZeros().toPlainString(); } public String toJiao(String amt) { BigDecimal bigD=new BigDecimal(amt).stripTrailingZeros(); return bigD.divide(C2.divide(C1)).stripTrailingZeros().toPlainString(); } public String toYuan(String amt) { BigDecimal bigD=new BigDecimal(amt).stripTrailingZeros(); return bigD.divide(C3.divide(C1)).stripTrailingZeros().toPlainString(); } }, JIAO{ public String toFen(String amt) { BigDecimal bigD=new BigDecimal(amt).stripTrailingZeros(); return bigD.divide(C1.divide(C2)).stripTrailingZeros().toPlainString(); } public String toJiao(String amt) { BigDecimal bigD=new BigDecimal(amt).stripTrailingZeros(); return bigD.divide(C2.divide(C2)).stripTrailingZeros().toPlainString(); } public String toYuan(String amt) { BigDecimal bigD=new BigDecimal(amt).stripTrailingZeros(); return bigD.divide(C3.divide(C2)).stripTrailingZeros().toPlainString(); } }, YUAN{ public String toFen(String amt) { BigDecimal bigD=new BigDecimal(amt).stripTrailingZeros(); return bigD.divide(C1.divide(C3)).stripTrailingZeros().toPlainString(); } public String toJiao(String amt) { BigDecimal bigD=new BigDecimal(amt).stripTrailingZeros(); return bigD.divide(C2.divide(C3)).stripTrailingZeros().toPlainString(); } public String toYuan(String amt) { BigDecimal bigD=new BigDecimal(amt).stripTrailingZeros(); return bigD.divide(C3.divide(C3)).stripTrailingZeros().toPlainString(); } }; static final BigDecimal C1=new BigDecimal(1); static final BigDecimal C2=C1.multiply(new BigDecimal(10)); static final BigDecimal C3=C2.multiply(new BigDecimal(10)); public String toFen(String amt) { throw new AbstractMethodError(); } public String toJiao(String amt) { throw new AbstractMethodError(); } public String toYuan(String amt) { throw new AbstractMethodError(); } }
测工具类不适用于System.out.println(RmbUnit.FEN.toFen("0.0")); 这个会放回0.0,其他我测过都ok的。
public static void main(String[] args) { System.out.println(RmbUnit.FEN.toFen(new String("0"))); System.out.println(RmbUnit.FEN.toJiao(new String("0"))); System.out.println(RmbUnit.FEN.toYuan(new String("0"))); System.out.println(RmbUnit.FEN.toFen(new String("0"))); System.out.println(RmbUnit.FEN.toJiao(new String("0"))); System.out.println(RmbUnit.FEN.toYuan(new String("0"))); System.out.println(RmbUnit.JIAO.toFen(new String("0"))); System.out.println(RmbUnit.JIAO.toJiao(new String("0"))); System.out.println(RmbUnit.JIAO.toYuan(new String("0"))); System.out.println(RmbUnit.JIAO.toFen(new String("0"))); System.out.println(RmbUnit.JIAO.toJiao(new String("0"))); System.out.println(RmbUnit.JIAO.toYuan(new String("0"))); System.out.println(RmbUnit.YUAN.toFen(new String("0"))); System.out.println(RmbUnit.YUAN.toJiao(new String("0"))); System.out.println(RmbUnit.YUAN.toYuan(new String("0"))); System.out.println(RmbUnit.YUAN.toFen(new String("0"))); System.out.println(RmbUnit.YUAN.toJiao(new String("0"))); System.out.println(RmbUnit.YUAN.toYuan(new String("0"))); System.out.println(RmbUnit.FEN.toFen(new String("100"))); System.out.println(RmbUnit.FEN.toJiao(new String("100"))); System.out.println(RmbUnit.FEN.toYuan(new String("100"))); System.out.println(RmbUnit.FEN.toFen(new String("1"))); System.out.println(RmbUnit.FEN.toJiao(new String("1"))); System.out.println(RmbUnit.FEN.toYuan(new String("1"))); System.out.println(RmbUnit.JIAO.toFen(new String("100"))); System.out.println(RmbUnit.JIAO.toJiao(new String("100"))); System.out.println(RmbUnit.JIAO.toYuan(new String("100"))); System.out.println(RmbUnit.JIAO.toFen(new String("1"))); System.out.println(RmbUnit.JIAO.toJiao(new String("1"))); System.out.println(RmbUnit.JIAO.toYuan(new String("1"))); System.out.println(RmbUnit.JIAO.toFen(new String("10"))); System.out.println(RmbUnit.JIAO.toJiao(new String("10"))); System.out.println(RmbUnit.JIAO.toYuan(new String("10"))); System.out.println(RmbUnit.YUAN.toFen(new String("100"))); System.out.println(RmbUnit.YUAN.toJiao(new String("100"))); System.out.println(RmbUnit.YUAN.toYuan(new String("100"))); System.out.println(RmbUnit.YUAN.toFen(new String("1"))); System.out.println(RmbUnit.YUAN.toJiao(new String("1"))); System.out.println(RmbUnit.YUAN.toYuan(new String("1"))); System.out.println(RmbUnit.YUAN.toFen(new String("10"))); System.out.println(RmbUnit.YUAN.toJiao(new String("10"))); System.out.println(RmbUnit.YUAN.toYuan(new String("10"))); System.out.println(RmbUnit.FEN.toString()); System.out.println(RmbUnit.JIAO.toString()); System.out.println(RmbUnit.YUAN.toString()); System.out.println(RmbUnit.FEN.toJiao("10.0")); System.out.println(RmbUnit.FEN.toFen("0.0")); //此处会返回0.0 System.out.println(RmbUnit.FEN.toJiao("haha"));//此处会报错 System.exit(0); }
测试结果:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 10 1 1 0.1 0.01 1000 100 10 10 1 0.1 100 10 1 10000 1000 100 100 10 1 1000 100 10 FEN JIAO YUAN 1 0.0 Exception in thread "main" java.lang.NumberFormatException at java.math.BigDecimal.<init>(BigDecimal.java:459) at java.math.BigDecimal.<init>(BigDecimal.java:728) at a.jery.RmbUnit$1.toJiao(RmbUnit.java:13) at Test.main(Test.java:68)