本帖最后由 kansyoukyou 于 2016-9-22 15:38 编辑
将数字转换为人民币的大写格式------
稍微向下就能明白这个程序其实应用的很广泛的,java的可移植性很高的语言,在涉及到现实生活的与支付交易相关的场景中,这段不起眼的小程序或许有挺多的应用。
刚自学java的时候,总是想当然的以为会提供有直接的工具或者程序,可惜后来发现不是,刚开始无从下手,后来想到提取每个位数上的数字,然后进行相应的替换,于是从个位起开始编写替换的方法,写到万的时候崩溃了,因为后面随着位数的升高涉及到的低位数是否为0的判断越多以及前一位的考虑。看了网上很多其他人的代码,一个也是用基础的方法成功实现的方法吸引了我,在这之中,对于java的除法和取余的运算的理解也有了很大的提升。
这里以亿以上的数字为例,截取部分代码说下单纯的利用嵌套的if循环和for循环以及java的除法和取余的运算转换。
//先创建好用于替换的字符数组
private static String[] NUMBER1 = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒","捌", "玖" };
private static String[] NUMBER2 = { "零", "拾", "佰", "仟", "万", "亿" };
----------------先说“万”以下的数字转换--------------------------
public static String sonhaihai(int num){ //万以下的数字转换方法
if(num>9999||num<0){
return ""; //先将万以上的数字排除
}
int q=num/1000; //变量q,用于接收千位上的值,了解java的整数除法运算就可。
int b=(num/100)%10; //变量b,这里注意的是在和100进行除法运算后,要再次和10进行取余,举个例子,b是用来存储百位上的数字的,
//只要num大于1000,num/100得出的值就必定是,大于10的,要得到百位上的数字,就必须对10进行取余运算。
int s=(num/10)%10; // 这就同理了。
int g=num%10;
StringBuffer sb=new StringBuffer(); //创立字符串缓冲对象sb。
if(q>0){
sb.append(NUMBER1[q]); //将对应数字替换为字符数组中的人民币大写字符,对各种可能的数字情况进行不同的处理,举个例子,
sb.append(NUMBER2[3]); //假如 方法中传入 922这个数字,那么q=0,当前这条语句就不会执行了。
}
if(b>0){
sb.append(NUMBER1);
sb.append(NUMBER2[2]);
}else {
if (q != 0) {
sb.append(NUMBER2[0]); //人民币大写中零的添加,比如一千零一夜~~~~
}
} //可能字数太多超了限制了,我放到了三楼了~~~~~ |
|