JAVA疯狂讲义第三版4.6.6数组的应用举例代码功能扩展

来源:互联网 发布:js中div显示隐藏 编辑:程序博客网 时间:2024/05/22 07:44

在汉语中我们数字0,1,2,3,4,5,6,7,8,9通常对应下面的汉字:

"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"

一个4位的数字我们可以读作几千几百几十几。其单位是看这四个数位于哪里。

如果这4个数字出现在1~4位,则其单位就是个,出现在5~8位其单位就是万,

出现在9~12位,其单位就是亿。

下面给出一个浮点数,最终保留两位,编程计算这个浮点数的中文钱币的读法。

输入:

12345678.123

23001307

1290905004.304

1200000

输出:

壹千贰百叁十肆万伍千陆百柒十捌元壹角壹分

贰千叁百万壹千叁百零柒元

壹十贰亿玖千零玖十万伍千零肆元叁角

壹百贰十万元


书上代码只实现了4位数以内的程序,也没有实现小数点后两位的表示。然后让读者扩展。

我把它扩展成1e12,然后包含角和分的表示,我的代码没有考虑0元的情况。如果还想完善可以再加

个条件就成了。


基本思路:

(1)4位一处理,提取小数的整数部分,如果整数部分长度不是4的倍数,那么就在前面补

零,让它的长度变成4的倍数。然后每次提取四位进行处理。

(2)步骤1完后,对于答案字符串中连续的零,只保留一个。同时如果0后有单位或权值那么

这个0也要被去掉。

(3)对于第一步加了前导0的情况,最终答案第一位是0,通过判断把这个0去掉即可。

(4)处理两个小数位


代码:

package learn;import java.util.Arrays;/** * @Description 把一个浮点数转变为中文读法 * @author WenYaxin * @date 2017/9/15 */public class NumberTransToRMB {//中文数组读法private String[] hanArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};//中文的单位private String[] powerArr = {"千","百","十",""};private String[] unitArr = {"元","万","亿"};/** * 把一个浮点数分解成整数部分和小数部分 * @param num 需要被分解的浮点数 * @return 分解出来的整数部分和小数部分。第一个数组元素时整数部分,第二个数组元素时小数部分 */private String solve(double num) {long integerPart = (long)num;                   //整数部分int floatPart = (int)((num-integerPart)*100); //保留两位小数String part1 = String.valueOf(integerPart);int len = part1.length();String temp = "";if(len%4 != 0){for(int i = len; i < (len/4+1)*4 ; i++)temp += '0';part1 = temp + part1;}len = part1.length();int start = len-1;int i,j = 0,k;String result = "";while(start > 0) {i = start - 3;k = i;String hanstr = "";for( ; i <= start; i++){int index = part1.charAt(i)-48;if(index != 0) {hanstr = hanstr + hanArr[index] + powerArr[i-k];}else {hanstr = hanstr + hanArr[index];}}hanstr += unitArr[j];result = hanstr + result;start = k-1;j++;}temp = result;result = "";char pre = temp.charAt(0);result += pre;len = temp.length();for(i = 1; i < len; i++) {char now = temp.charAt(i);if(now == pre && pre == '零') {pre = now;continue;}else {if(now == '千' || now == '百' || now == '十' || now == '亿' || now == '万' || now == '元') {int resultLen = result.length();if(result.charAt(resultLen-1) == '零') {result = result.substring(0,resultLen-1);}}result += now;pre = now;}}if(result.charAt(0) == '零')result = result.substring(1,result.length());if(floatPart != 0) {int num2 = floatPart%10;floatPart = floatPart/10;int num1 = floatPart%10;if(num1 != 0)result = result + hanArr[num1] + '角';if(num2 != 0)result = result + hanArr[num2] + '分';}return result;}public static void main(String args[]) {NumberTransToRMB rmb = new NumberTransToRMB();System.out.println(rmb.solve(15158));}}


阅读全文
0 0
原创粉丝点击