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("个", "圆");
}
}