java版,实现人民币的大小写转换

前两天看了,一个技术牛人的访谈,讲的非常的精彩。我只记得当中他说,程序员要怎么学习。提了很重要的一点,就是要经常性的写博客,把自己学到的知识,分享出来,这样不仅可以提高自己的能力,还能够让别人看你程序的时候,找出你的错误。我感觉这个方法特别的好,所以从今天,开始我也要把握所学的只是分享出来。希望广大看到我写博客的人,看到我的错误,欢迎批评指正。

  好了,废话不多说,开始今天的分享,今天分享一个人民币大小写转换的,问题。这个是一个非常经典的问题。看上去非常的简单,但是要把所有的情况都考虑到。因为我学到不怎么好,现在能想到的点就是那么多。可能有的地方用的方法不是特别的优化。但是基本的功能是可以实现的。中间有一个地方,我在程序中也思考过,不知道怎么改正,输入的金额是double类型的,输入太长 的话,系统会自动以科学计数法的方法表示,以科学计数法表示的金额,还没有实现怎么转换为大写的形式。有知道的朋友,可以给我提醒一下。谢谢。

 今天的代码重点的地方我都加了注释,还有不懂的地方,可以私聊我。


package suanfa;


import java.util.Scanner;


public class Numberconvert {
public static void main(String[] args) {
boolean flag = true;
Scanner sc = new Scanner(System.in);
ConvertChinese convertChinese = new ConvertChinese();
while (flag) {
System.out.println("输入你要转换的金额:");
double number = sc.nextDouble();
if (number > 0) {
System.out.println(convertChinese.getChinese(number) + "整");
} else {
flag = false;
}
}
System.out.println("结束,要想测试,请重新运行");
}


}


class ConvertChinese {
private String chinese = "";
private String decimalsChinese = "";
private String intNumber = "";
private String decimals = "";
String chineseUnit = "元=十=百=千=万=十=百=千=亿=十=百=千=万";
String chineseValue = "零壹贰叁肆伍陆柒捌玖";


public String getChinese(double number) {
// 判断所传过来的值,是整数还是小数
String srcNumber = number + "";// 把长整型转换为String 型
System.out.println("源数据:" + srcNumber);


intNumber = srcNumber.substring(0, srcNumber.indexOf("."));
decimals = srcNumber.substring(srcNumber.indexOf(".") + 1, srcNumber.length());


System.out.println("整数部分:" + intNumber);
System.out.println("小数部分:" + decimals);


String chineseUnit1[] = chineseUnit.split("=");
// 转换整数部分
for (int i = 0; i < intNumber.length(); i++) {
chinese += chineseValue.charAt(Integer.parseInt(srcNumber.charAt(i) + ""))
+ chineseUnit1[intNumber.length() - 1 - i];
}

boolean isZero=Integer.parseInt(decimals.substring(0,1))==0;
//这个地方的判断主要是因为,零钱有小数部分,小数部分的默认值是0.0,默认的有小数部分。所以需要判断
//小数部分那个小数是否为0,如果为0,就需要转换小数部分了。
// 计算小数部分
if (!(decimals.length() == 1 &&  isZero)) {
decimalsChinese += chineseValue.charAt(Integer.parseInt(decimals.substring(0, 1))) + "角"
+ chineseValue.charAt(Integer.parseInt(decimals.substring(1, 2))) + "分";
}
chinese += decimalsChinese;


while (chinese.indexOf("零零") != -1 || chinese.indexOf("零万") != -1 || chinese.indexOf("零亿") != -1
|| chinese.indexOf("亿万") != -1 || chinese.indexOf("零百") != -1 || chinese.indexOf("零元") != -1
|| chinese.indexOf("零十") != -1 || chinese.indexOf("零千") != -1 || chinese.indexOf("零角") != -1) {
chinese = chinese.replaceAll("零零", "零");
chinese = chinese.replaceAll("零十", "零");
chinese = chinese.replaceAll("零万", "万");
chinese = chinese.replaceAll("零亿", "亿");
chinese = chinese.replaceAll("零元", "元");
chinese = chinese.replaceAll("亿万", "亿零");
chinese = chinese.replaceAll("零百", "零");
chinese = chinese.replaceAll("零千", "零");
chinese = chinese.replaceAll("零角", "零");
chinese = chinese.replaceAll("零([十百千])", "零");
}


return chinese;


}
}

你可能感兴趣的:(金钱大小写转换)