JAVA疯狂讲义第三版4.6.6数组的应用举例代码功能扩展
2017-09-15 14:30
609 查看
在汉语中我们数字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)处理两个小数位
代码:
"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"
一个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)); } }
相关文章推荐
- 初步学习Java疯狂讲义数组的用用举例
- Auto activation triggers for Java(代码提示)功能扩展
- 疯狂JAVA讲义---第十一章(下):AWT编程-高级应用
- 黑马程序员-9-java-IO流知识点串讲(3)-IO修饰(功能扩展)类及其应用
- 【疯狂Java讲义学习笔记】【流程控制与数组】
- JavaSE017_数组之应用举例(利用二维数组实现五子棋功能完善——二人对战)
- 【CORE JAVA】反射应用:通用方法-扩展数组长度
- 疯狂java讲义----java顺序循环与java数组
- 二、 请按要求对下面的Java代码进行测试。代码的功能是:用折半查找法在元素呈升序排列的数组中查找值为key的元素。
- Android疯狂讲义学习笔记——XML布局和java代码共同控制用户界面组件
- java疯狂讲义第三版
- 疯狂JAVA讲义---第四章(上):流程控制和数组
- Java数组-查表法在生活中的应用举例
- 34、疯狂java讲义第三版
- Auto activation triggers for Java(代码提示)功能扩展
- 流程控制与数组——Java疯狂讲义
- JAVA功能代码《13》----在Java中调整数组大小
- [疯狂Java]泛型:泛型构造器、泛型方法的重载问题、泛型数组的问题(应该摒弃)、?下限的典型应用
- JAVA功能代码《13》----在Java中调整数组大小
- 疯狂java讲义没有运行起的一段代码示例