生成金额大写的实例

本文介绍了一个Java程序,实现将阿拉伯数字转换为中国传统形式的金额表达,包括整数和小数部分的处理,以及四舍五入规则。
------- android培训java培训、期待与您交流! ----------

package com.itheima;

import java.util.ArrayList;
import java.util.List;
/**
 * 第十题:金额转换,阿拉伯数字转换成中国传统形式。

  例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整

 


 * @author Administrator
 *思路:小写的数字和汉字大写的数字有着对象的关系,数字的本身就是汉字
 *  大写的数组角标,得到阿拉泊数字,就可以找到对象的汉字,然后定义数组,
 *  长度为十三,用于装单位使用,再定义一个同样长度的数组,用于放入对应的
 *  转换数据,当所到对应的转换数据时,就得了了单位大小。
 *
 */
public class Test10 {
 public static void main(String[] args) {
  //小数点精确到两位,此转换支持13位整数部分。小数无限制,但会四舍五入且保留两位。
  System.out.println(tranCapital("12223034.696"));
  
 }
 //此方法用于控制转换将需要转换的字符串分解成各个部分,以方便进行处理。
 private static String tranCapital(String tran_data) {
  
  
  String[] capital = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆","柒", "捌", "玖", };
  
  
  String[] Int_Dec=tran_data.split("\\.");
  char[] temp_Integer=Int_Dec[0].toCharArray();//正数部分
  char[] temp_Decimal=Int_Dec[1].toCharArray();//小数部份
  
  int[] tran_Integer=new int[13];
  int[] tran_Decimal=new int[temp_Decimal.length];
  
  int[] tranIndex={tran_Integer.length-1};
  //整数部分的内容
  for(int i=temp_Integer.length-1;i>=0;i--){
   tran_Integer[tranIndex[0]--]=Integer.parseInt(Character.toString(temp_Integer[i]));
  }
  //小数部份的内容
  for(int i=0;i<tran_Decimal.length;i++){
   tran_Decimal[i]=Integer.parseInt(Character.toString(temp_Decimal[i]));
  }
  //四舍五入
  rounding(tran_Integer,tran_Decimal,tranIndex);
  
  String formatIngeter=tranInteger(capital, tran_Integer,tranIndex[0]+1);
  String formatdecimal=tranDecimal(capital,tran_Decimal);
  return formatIngeter+formatdecimal;
 }
 //四舍五入的算法。
 private static void rounding(int[] tran_Integer, int[] tran_Decimal,int[] tranIndex) {
  // TODO Auto-generated method stub
  if(tran_Decimal[2]>5){
   if(tran_Decimal[1]+1>9){
    //向前一位进一,所以等于0
    tran_Decimal[1]=0;
    if(tran_Decimal[0]+1>9){
     //向前一位进一,所以等于0
     tran_Decimal[0]=0;
     //因为小数部分逢10所以要向整数部分进一.
     dounding_int(tran_Integer,tranIndex);
    }else{
     tran_Decimal[0]=tran_Decimal[0]+1;
     tran_Decimal[1]=0;
    }
   }else{
    tran_Decimal[1]=tran_Decimal[1]+1;
   }
  }
 }
 //四舍五入整数部分。
 private static void dounding_int(int[] tran_Integer,int[] tranIndex) {
  for(int i=tran_Integer.length-1;i>=0;i--){
   if(tran_Integer[i]+1>9){
    tran_Integer[i]=0;
    tranIndex[0]=tranIndex[0]-1;
   }else{
    tran_Integer[i]=tran_Integer[i]+1;
    break;
   }
  }
 }

 //小数部分查表,并返回结果。
 private static String tranDecimal(String[] capital,int[] tran_Decimal) {
  String format_Decimal=capital[tran_Decimal[0]]+"角"+capital[tran_Decimal[1]]+"分";
  return format_Decimal;
 }

 private static String tranInteger(String[] capital, int[] tran_Integer,int tranIndex) {
  String[] unit = new String[] {"万亿","仟亿","佰亿","拾亿","亿 ","仟万","佰万", "拾万","万", "仟","佰","拾","个"};
  String[] formatInteger=new String[tran_Integer.length];
  //查内容表
  for(int i=0;i<tran_Integer.length;i++){
   formatInteger[i]=capital[tran_Integer[i]];
  }
  //查单位表
  String zero="";
  for(int i=tranIndex;i<tran_Integer.length;i++){
   String unit_temp=unit[i];
   if(!formatInteger[i].equals("零"))
    if(i+1<tran_Integer.length&&tran_Integer[i+1]==0){
     //因为4查表出来是亿,而8查表出来是万
     if(i+1==4||i+1==8){
      formatInteger[i]=formatInteger[i]+unit_temp;
     }else{
      if(unit_temp.length()!=1){
       unit_temp=""+unit_temp.charAt(0);
      }
      formatInteger[i]=formatInteger[i]+unit_temp;
     }
    }else{
     if(unit_temp.length()!=1){
      unit_temp=""+unit_temp.charAt(0);
     }
     formatInteger[i]=formatInteger[i]+unit_temp;
    }
  }
  //组织格式字符串
  String part="";
  for(int i=tranIndex;i<formatInteger.length;i++){
   part=part+formatInteger[i];
  }
  return part.replaceAll("零+", "零").replace("个", "圆");
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值