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
- JAVA疯狂讲义第三版4.6.6数组的应用举例代码功能扩展
- 初步学习Java疯狂讲义数组的用用举例
- [疯狂Java讲义精粹] 第三章|流程控制与数组
- 浮点数字转为大写人民币读法---来自《疯狂Java讲义》第四章的数组应用
- 疯狂java讲义第三版第五章第一题
- 疯狂java 讲义第三章练习题---画圆
- 疯狂java 讲义第三章练习题---画圆
- 疯狂JAVA讲义第三章练习
- 疯狂java讲义--第三章习题 画圆
- Java疯狂讲义读书笔记第三章
- 疯狂java讲义没有运行起的一段代码示例
- 《疯狂JAVA讲义》——二维数组
- 疯狂Android讲义第三版源码
- 读书笔记-疯狂Java讲义(第三版)第三章 数据类型和运算符
- 《疯狂Java讲义(第三版)》学习笔记之 —— 形参个数可变的方法
- 疯狂IOS讲义(下) 的代码
- 读书笔记-疯狂Java讲义(第三版)第一章Java语言概述与开发环境
- 【Java】《Java疯狂讲义》自学笔记-第三章
- jsp一改动,就需要重启的解决方案
- OpenCV 编译出的so库改名办法
- 工厂方法模式
- preg_replace—替换内容中包括$特殊符号时
- sonar rule
- JAVA疯狂讲义第三版4.6.6数组的应用举例代码功能扩展
- 简单的前端轮播(无自动跳转)
- STM32F4的HAL库开启串口空闲中断
- JPA主键生成策略
- HTTP协议格式
- PPT这样学就对了之首页制作
- Swift基础之iOS 10.3 如何更换 app 图标
- 2017美团秋招笔试编程题——后台研发
- 关于Python的基础知识8--二维列表