zoukankan      html  css  js  c++  java
  • 金额转换类

    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);

           

           

       }

    }

  • 相关阅读:
    python学习笔记之---面向对象的三大特性
    python学习笔记之---类的属性和方法的访问总结
    python学习笔记之--类的三种方法
    python学习笔记之--面向对象技术
    python学习笔记之--面向对象和面向过程
    整数反转
    逻辑运算&map函数&filter函数&reduce函数
    python整理&&集合学习
    python基本数据类型
    python基础&条件语句
  • 原文地址:https://www.cnblogs.com/chinaifae/p/10620211.html
Copyright © 2011-2022 走看看