將数字金额转换为中文大写

注:参考百度经验中的文章,并对其进行修改,使此工具类可以正常运行;


一、工具类
import java.text.DecimalFormat;

/**
 * 對數字進行操作的工具類
 */
public class NumberUtil {

/**
* 將数字金额转换为中文大写
* @return_type:String
*/
public static String convert(double d){

 DecimalFormat format = new DecimalFormat("#0.00");//格式化金额,避免科学计数

 String str = format.format(d);

 /*if (str.equals("0.00")){

 str = "0.00";

 };*/

 String[] StrArr = str.split("\\.");//以小数点拆分整数和小数两部分,存入数组

 String s = StrArr[0];         

 int len = StrArr[0].length(); 

 String myStrInt = "";

 String tmp;

 String mydd;

 String[] CurrNumHz = new String[]{"壹","贰","叁","肆","伍","陆","柒","捌","玖","零"};

 String[] CurrNum = new String[]{"1","2","3","4","5","6","7","8","9","0"};

 String[] CurrUnit = new String[]{"仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","元"};

 for (int i = 0; i < len ; i++){                        

 tmp = s.substring(i, i+1);
 
 //遍历整数部分各数字
 for (int j = 0; j < CurrNum.length ; j++){

 if (CurrNum[j].equals(tmp)) {//如果数字等于CurrNum里的元素

 mydd=CurrUnit[CurrUnit.length-len+i];//得到元拾佰仟等货币单位

 myStrInt = myStrInt + CurrNumHz[j]+mydd;//拼接大写字串

 break;//满足条件退出内循环



 }

 }

     //按照书写习惯格式化字符串

     myStrInt = myStrInt.replace("零拾", "零");

 myStrInt = myStrInt.replace("零佰", "零");

 myStrInt = myStrInt.replace("零仟", "零");

 myStrInt = myStrInt.replace("零零零", "零");

 myStrInt = myStrInt.replace("零零", "零");

 myStrInt = myStrInt.replace("零万", "万");

 myStrInt = myStrInt.replace("零亿", "亿");

 myStrInt = myStrInt.replace("零元", "元");

 if (myStrInt.equals("元")) {

 myStrInt = "零元";

 } 

 //处理小数部分

 s = StrArr[1];         

 if ((myStrInt.equals("零元") == true) && (s.equals("00") == false)){

         myStrInt = "";

 }

 len = StrArr[1].length();//实际上len始终等于2,因为"#0.00"的规定

 String myStrDec = "";

 //以下算法与整数部分相同,不再赘述

 CurrNumHz = new String[]{"壹","贰","叁","肆","伍","陆","柒","捌","玖","零"};

 CurrNum = new String[]{"1","2","3","4","5","6","7","8","9","0"};

 CurrUnit = new String[]{"角","分"};
 

 for (int i = 0; i < len ; i++){   

 tmp = s.substring(i, i+1);

 for (int j = 0; j < CurrNum.length ; j++){

 if (CurrNum[j].equals(tmp)) {

 mydd=CurrUnit[CurrUnit.length-len+i];

 myStrDec = myStrDec + CurrNumHz[j]+mydd;

 break;

    } 

 }

 }

 myStrDec = myStrDec.replace("零分", "");

 myStrDec = myStrDec.replace("零角", "");

 if ((myStrInt.indexOf("元") > 0) && (myStrDec.indexOf("分") > 0) && (myStrDec.indexOf("角") == -1)) {

 myStrDec = "零" + myStrDec;//形如1.03,角位插入“零”

 }

 if (myStrDec.equals("") == true){

    myStrInt += "整"; //没有小数,则整数部分末尾加上“整”

 }

 String ResultStr = myStrInt + myStrDec;//合并整数与小数的字串

 return ResultStr; //返回结果
}
}

二、测试

        /**
* 測試將数字金额转换为中文大写1
* @return_type:void
*/
@Test
public void test2() {
 System.out.println("请输入一个金额(最大到千亿,如有小数,只保留2位小数即角分):");


 Scanner scan=new Scanner(System.in);


 double mynum = scan.nextDouble();                       //得到输入的金额


 DecimalFormat format = new DecimalFormat("#0.00");      //格式化金额,避免科学计数 
 
 String str = format.format(mynum);
 System.out.println("str:" + str);


 String[] StrArr = str.split("\\.");                     //以小数点拆分整数和小数两部分,存入数组


 int len = StrArr[0].length(); 


      if (len > 12) {


          System.out.println("超过范围");                        //限定最大整数部分到千亿 


          return;


      } 
      
      //將数字金额转换为中文大写,并返回
      str = NumberUtil.convert(mynum);//调用convert函数计算得到结果


      System.out.println(str);//显示结果


}

/**
* 測試將数字金额转换为中文大写2
* @return_type:void
*/
@Test
public void test3() {
double d = 0;
String result = NumberUtil.convert(d);
System.out.println("人民币" + result);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值