游_客 发表于 2009-1-9 09:37:00

JAVA应用:

读入一个浮点数值,将其转化为金额的中文大写方式.
  试验要求:
  当金额为整数时,只表示整数部分,省略小数部分,并添加"整"字.
  当金额中含有连续的0时,只需要一个"零"即可.
  10的表示方式.例如110--壹佰一拾元整,10---一拾元整
  --------------------------------------------------------------------------------
   



1import java.io.*;
  2class chineseMoney...{
  3 private String number[]=...{"","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
  4 private String unit[]=...{"","拾","佰","仟"};
  5 private String small[]=...{"角","分"};
  6 //private String strNumber,strUnit,strAll;

  7
  8 //是否在number中

  9 private boolean IsInNumber(String strNumber)
  10 ...{
  11 boolean inNumber=false;
  12 for (int i=0;i<9;i)
  13 ...{
  14 if (strNumber.compareTo (number)==0) inNumber=true;
  15 }
  16 return inNumber;
  17 }
  18
  19
  20 private String SplitChineseNumber(int intUnit,String strInt)
  21 ...{
  22 int l=strInt.length ();
  23 int j,k,zeorCountTemp=0;
  24 String strUnit="",strNumber="",strAll="";
  25
  26 //判断在千万到万位 是否全为0,是的话,不返回“万”,返回“”;

  27 boolean temp=false;
  28 for (k=0;k29 ...{
  30 String strTemp=strInt.substring(k,k 1);
  31 int intTemp=Integer.parseInt(strTemp);
  32
  33 if (intTemp!=0) temp=true;
  34 }
  35 if (temp==false)
  36 ...{
  37 if (intUnit==5)return "";
  38 }
  39
  40
  41 int checkK=0;
  42 //正式开始转换

  43 for (k=0;k44 ...{
  45 String strTemp=strInt.substring(k,k 1);
  46 int intTemp=Integer.parseInt(strTemp);
  47 strNumber= number;
  48
  49 //j 从

  50 j=l-1-k;
  51
  52 strUnit=unit;
  53
  54
  55 //数值 单位

  56 //如果数值=0,数值=“”

  57 if (intTemp==0)
  58 ...{
  59 //

  60 if (zeorCountTemp==0)
  61 ...{
  62 //单位=零

  63 strUnit=strUnit.replace(''''拾'''',''''零'''');
  64 strUnit=strUnit.replace(''''佰'''',''''零'''');
  65 strUnit=strUnit.replace(''''仟'''',''''零'''');
  66 }
  67 else
  68 ...{
  69 //多零情况下,单位=“”

  70 strUnit=strUnit.replaceAll("拾","");
  71 strUnit=strUnit.replaceAll("佰","");
  72 strUnit=strUnit.replaceAll("仟","");
  73 }
  74 zeorCountTemp;
  75 }
  76 checkK=k;
  77 strAll =strNumber strUnit;
  78 }
  79
  80 return strAll;
  81 }
  82
  83 private String onlyInt(int intInt)
  84 ...{
  85 String strInt;
  86 strInt=String.valueOf(intInt);
  87 int l=strInt.length();
  88
  89 String strAll="";
  90 //按照四位 一分隔 来计算

  91 if (l>8)//亿

  92 ...{
  93 strAll =this.SplitChineseNumber(9,strInt.substring(0,l-8)) "亿";
  94 strAll =this.SplitChineseNumber(5,strInt.substring(l-8,l-4));
  95 strAll =this.SplitChineseNumber(1,strInt.substring(l-4,l)) "元";
  96 }
  97 else if (l>4)//万

  98 ...{
  99 strAll =this.SplitChineseNumber(5,strInt.substring(0,l-4));
  100 strAll =this.SplitChineseNumber(1,strInt.substring(l-4,l)) "元";
  101
  102 }
  103 else if (l>0)
  104 ...{
  105 strAll =this.SplitChineseNumber(1,strInt) "元";
  106 }
  107//

  108//

  109//

  110//

  111// 100101000

  112 int checkL=strAll.length();
  113
  114 char strTemp2;
  115 for (int k=1;k116 ...{
  117 strTemp2=strAll.charAt(k);
  118 if (strTemp2==''''零'''')
  119 ...{
  120 //判断零的前后是否有数字,无数字则删除这个零

  121 String strBeforeTemp=strAll.substring(k-1,k);
  122 String strAfterTemp=strAll.substring(k 1,k 2);
  123 if (!this.IsInNumber(strBeforeTemp)&&!this.IsInNumber(strAfterTemp))
  124 ...{
  125 strBeforeTemp=strAll.substring(0,k);
  126 strAfterTemp=strAll.substring(k 1,checkL);
  127 strAll= strBeforeTemp strAfterTemp;
  128 break;
  129 }
  130
  131 }
  132 }
  133
  134 return strAll;
  135
  136 }
  137
  138 private String onlySmall(int intSmall)
  139 ...{
  140 String strNumber,strUnit,strAll;
  141 strNumber="";strUnit="";strAll="";
  142 String strSmall,strTemp;
  143 strSmall=String.valueOf(intSmall);
  144 int i;
  145 if (intSmall>=10)
  146 ...{
  147 for (i=0;i148 ...{
  149 strTemp=String.valueOf(intSmall).substring(i,i 1);
  150 if (Integer.parseInt(strTemp)!=0)
  151 ...{
  152 strNumber=number;
  153 strUnit=small;
  154 strAll =strNumber strUnit;
  155 }
  156 }
  157 }
  158 else
  159 ...{
  160 if (intSmall!=0)
  161 ...{
  162 strNumber=number;
  163 strUnit=small;
  164 strAll =strNumber strUnit;
  165 }
  166 }
  167
  168 return strAll;
  169 }
  170
  171 public String getChineseMoney(double number)
  172 ...{
  173 //四舍五入

  174 number=(number*100 0.5)/100;
  175
  176 String strAll,strChineseInt,strChineseSmall,strZheng;;
  177 int intInt,intSmall;
  178 strChineseInt="";strChineseSmall="";strZheng="";
  179
  180 //整数部分

  181 intInt=(int)( number*100/100);
  182 if (intInt!=0)
  183 ...{
  184 strChineseInt=onlyInt(intInt);
  185 }
  186 //小数部分

  187 double temp=(number-intInt)*100*100/100;
  188 //对小数部分四舍五入

  189 intSmall=(int)(temp*100 0.5)/100;
  190 if (intSmall!=0)
  191 ...{
  192 strChineseSmall=onlySmall(intSmall);
  193 }
  194 else
  195 ...{
  196 strZheng="整";
  197 }
  198 strAll=strChineseInt strChineseSmall strZheng;
  199 return strAll;
  200 }
  201 public static void main(String args[]) throws IOException
  202 ...{
  203 chineseMoney cm=new chineseMoney();
  204 double money;
  205 String strMoney,strChineseMoney;
  206 strMoney="";
  207 //读取

  208 System.out.println("输入货币(四舍五入):");
  209 BufferedReader cin = new BufferedReader(new InputStreamReader( System.in));
  210 strMoney = cin.readLine();
  211 money=Double.parseDouble(strMoney);
  212 //money=12346.465;//Double.parseDouble(strMoney);

  213 strChineseMoney=cm.getChineseMoney(money);
  214 System.out.println(strChineseMoney);
  215 }
  216}
页: [1]
查看完整版本: JAVA应用: