黑马程序员技术交流社区
标题:
入学测试题之金额转换
[打印本页]
作者:
Huberry
时间:
2014-10-6 11:20
标题:
入学测试题之金额转换
package com.itheima;
/*
* 题目: 金额转换,阿拉伯数字转换成中国传统形式。
* 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
*
* 思路:
* 1、定义一个方法,接收一个double类型参数,即要转换的数字
* 2、定义两个字符数组,分别存储数字对应的汉字 和 每一位数字所对应的单位的汉字
* 3、把要转换的数字转换成字符串,并对小数部分和整数部分单独操作
* 4、若小数部分不为零,就把小数部分数字转换成对应的汉字,并在分别在后面加上‘角’和‘分’
* 5、对于整数部分,逐次对每一位的数字进行操作,转换成汉字并在每一位后面加上对应的单位
* 6、简单的转换完成后,对得到的字符串进行特殊情况的操作,如:“零佰”、“零仟”这些组合要替换掉,可以通过正则表达式来实现
*/
public class Test10 {
public static void main(String[] args) {
double d = 100000000000000.00;
System.out.println(d+":\r\n"+toChinese(d));
}
public static String toChinese(double value){
//把数字对应的汉字封装成一个char数组
char[] numVal ={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
//把每一位数对应的单位封装成一个数组,
char[] unit = {'圆','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万','拾','佰'};
String longStrVal = ""; //定义一个字符串用来表示整数部分转换后的值
String decStrVal = ""; //表示小数部分转换后的值
if(value>100000000000000.00){ //判断这个值是否超出范围,此处是选的一个比较接近的值,具体数值还没研究出来
System.out.println("数值过大,会损失精度....");
}else{ //没有超出范围则继续操作
long bignum = (long)(value*100); //把要操作的数转换成整数
String bigStr = String.valueOf(bignum);//变成字符串
String longStr = bigStr.substring(0, bigStr.length()-2); //取得整数部分所表示的字符串
String decStr = bigStr.substring(bigStr.length()-2); //小数部分所表示字符串
//对小数部分进行处理
if(decStr.equals("00")){
decStrVal="整";
}else{
//把数字转换成汉字,并在对应位上加上‘角’和‘分’
decStrVal=numVal[decStr.charAt(0)-'0']+"角"+numVal[decStr.charAt(1)-'0']+"分";
}
//对整数部分进行处理
for(int i=0; i<longStr.length(); i++){
//对每一位数字都进行转换,并在每一位后面加上对应的单位
longStrVal =longStrVal+numVal[longStr.charAt(i)-'0']+unit[longStr.length()-i-1];
}
//对特殊组合进行排除
longStrVal = longStrVal.replaceAll("零[拾佰仟]", "零"); //“零拾”、“零佰”、“零仟”替换成“零”
longStrVal = longStrVal.replaceAll("零+", "零"); //上条语句执行完后会出现多个“零”,把多个“零”变成一个“零”
longStrVal = longStrVal.replaceAll("零([圆万亿])", "$1");//“零远”、“零万”、“零亿”替换成“圆”、“万”、“亿”
longStrVal = longStrVal.replaceAll("亿万", "亿"); //若亿和万之间全是零,则把万去掉
}
return longStrVal+decStrVal; //最后把整数部分和小数部分相加即转换完成
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2