金额转换类

package com.util.NumberFormat;

 

import java.math.BigDecimal;

import java.util.EnumMap;

 

public class NumberFormat {

     

    // 1. 定义数字单位的枚举类型

    public enum UnitOfMeasurement {

       /**

        * 利用构造函数传参:万,百万,千万,亿,十亿,百亿,千亿   

        * 由于没有对应的英文单词表示

        */

       QIANYI(11),BAIIYI(10),YI(8),QIANWAN (7),BAIWAN (6),WAN (4),GEWEI(0);

 

       // 定义私有变量

       private int nCode ;

 

       // 构造函数,枚举类型只能为私有

       private UnitOfMeasurement( int _nCode) {

           this . nCode = _nCode;

       }

 

       @Override

       public String toString() {

           return String.valueOf ( this . nCode );

       }

    }

     

      /**

       * 创建数据计量单位的枚举类型数据值

       * @return

       */

    private static  EnumMap<UnitOfMeasurement, String> creatEnumMap(String type) {

        // 1. 演示定义 EnumMap 对象, EnumMap 对象的构造函数需要参数传入 , 默认是 key 的类的类型

        EnumMap<UnitOfMeasurement, String> currEnumMap = new EnumMap<UnitOfMeasurement, String>(UnitOfMeasurement. class );

        currEnumMap.put(UnitOfMeasurement. GEWEI , type );

        currEnumMap.put(UnitOfMeasurement. WAN , "万" );

        currEnumMap.put(UnitOfMeasurement. BAIWAN , "百万 " );

        currEnumMap.put(UnitOfMeasurement. QIANWAN , "千万" );

        currEnumMap.put(UnitOfMeasurement. YI , "亿" );

        currEnumMap.put(UnitOfMeasurement. BAIIYI , "百亿 " );

        currEnumMap.put(UnitOfMeasurement. QIANYI , "千亿" );

        return currEnumMap;

     }

     

     

      /**

       * 将BigDecimal 数据整理格式

       * 计算方式万,百万,千万,亿,

       * bigDecimal 最大值只支持到十亿

       * @param number

       * @return

       */

      public static  String numberFormat(BigDecimal number,String type){

           String numberFormat="0";

           try{

                 if(type!=null){

                      numberFormat=numberFormat+type;

                 }

                 if(number!=null){

                       EnumMap<UnitOfMeasurement, String> currEnumMap =creatEnumMap(type);

                       for(UnitOfMeasurement aUnit : UnitOfMeasurement.values ()){

                             BigDecimal mu=(new BigDecimal(10)).pow(aUnit.nCode);//求幂值计算

                             if(number.compareTo(mu)>=0){

                                      String numberString=number.divide(mu, 2, BigDecimal.ROUND_HALF_UP).toString();

                                      System.out.println("numberString=="+numberString);

                                      String[] ret=numberString.split("\\.");

                                      if(ret[1].equals("00")){//去除小数位全部为0情况

                                            numberString=ret[0];

                                      }else{

                                            if(ret[1].endsWith("0")){//去除只有末尾为0的情况

                                                 numberString=numberString.substring(0, numberString.length()-1);

                                            }

                                      }

                                       numberFormat=numberString+currEnumMap.get(aUnit);

                                       break;

                             }

                        }

                 }

           }catch(Exception e){

                 e.printStackTrace();

           }

          

           return numberFormat.trim();

      }

     

     

     

     

/* * test方法*/

   public static void main(String[] args ) {

      //元

        String ss= numberFormat(new BigDecimal(210000),"元");

        System.out.println("ss=="+ss);

        //2万 1.9

        String ss1= numberFormat(new BigDecimal(19999),"元");

        System.out.println("ss=="+ss1);

        //十万21

        String ss2= numberFormat(new BigDecimal(210000),"元");

        System.out.println("ss=="+ss2);

        //百万2.21

        String ss3= numberFormat(new BigDecimal(2210000),"元");

        System.out.println("ss=="+ss3);

        //千万1.89

        String ss4= numberFormat(new BigDecimal(18900000),"元");

        System.out.println("ss=="+ss4);

        //亿

        String ss5= numberFormat(new BigDecimal(189000000),"元");

        System.out.println("ss=="+ss5);

        //十亿

        String ss6= numberFormat(new BigDecimal(1890000000),"元");

        System.out.println("ss=="+ss6);

       

       

   }

 

}

posted on 2019-03-29 11:32  我是司  阅读(362)  评论(0编辑  收藏  举报

导航