- 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; //最后把整数部分和小数部分相加即转换完成
- }
- }
复制代码
|
|