声明RMB人民币类如下,实现其中的成员方法

题目分析:最重要的是考虑如何转换整数金额。首先找到小数点的位置,将金额分为小数和整数部分分别处理。对于整数部分按亿,万,千四位一分进行处理。目前转换范围还存在一定局限,还需继续改进。
代码给出详细注释:

import java.util.Scanner;
import java.text.DecimalFormat; //科学计数法的转换
public class RMB {static char[] ZhenShuDanWei = {'元', '拾', '佰', '仟', '万', '亿'}; //整数只处理到亿static char[] XiaoShuDanWei = {'角', '分'}; //小数只处理到分static char[] Shuzi = {'零', '壹', '贰', '叁', '肆', '伍' ,'陆', '柒', '捌' ,'玖'};public static String check(char[] money) //对于零的处理应该放在最后一次遇到{String ans = new String();int wet = money.length - 1;if(wet == 0 && money[0] == '0') //处理金额为小数的情况{ans += Shuzi[0];}else{int sign = 0;//标记是否遇到0for(int i = 0; i < money.length; i++){if(sign == 0 && money[i] == '0') //第一次遇到了零{sign = 1;}else if(sign == 1 && money[i] == '0') //在一连串的零后又遇到了零 {if(i + 1 < money.length && money[i + 1] == '0') continue; //0的后面还是零且不在最后一位else if(i + 1 < money.length && money[i + 1] != '0') ans += Shuzi[0]; //0的后面不是零且不在最后一位else if(i == money.length - 1) continue; //到结尾还是零,无需处理}else if(sign == 1 && money[i] != '0') //在一连串的零后又遇到了非零数字{   sign = 0;ans += Shuzi[Integer.valueOf(money[i]) - 48]; //千万注意Integer.valueOf(money[i])转换的是字符的ascll码值if(i != wet) ans += ZhenShuDanWei[wet - i]; //不是最后一位才会加上单位}else if(sign == 0 && money[i] != '0') //之前一直没有遇到零{ans += Shuzi[Integer.valueOf(money[i]) - 48];if(i != wet) ans += ZhenShuDanWei[wet - i];}}}return ans;}public static String toString(double x){DecimalFormat df = new DecimalFormat("###0.00");char[] money = df.format(x).toCharArray();  String Zhen = new String(), Xiao = new String();//答案字符串//记录一下java本身提供的数组复制方法//System.arraycopy(array, 0, array2, 0, array.length);//(被复制的数组,从几号下标开始复制,复制到哪个数组,复制到新数组第几号下标,复制长度)int index = 0; //小数点的位置for(int i = 0; i < money.length; i++) if(money[i] == '.') {index = i; break;} //获得小数点下标位置//将小数和整数分开处理,将整数分解成亿,万,千char[] ZhenShu = new char[index];System.arraycopy(money, 0, ZhenShu, 0, index); //获取整数金额 //System.out.println(ZhenShu);//还要修改int elength = 0, wlength = 0; //当存在亿位和万位时,记录其长度if(ZhenShu.length > 8) //亿 {char[] temp = new char[ZhenShu.length - 8];elength = ZhenShu.length - 8; //存在时记录亿位的长度for(int i = 0; i < ZhenShu.length - 8; i++) temp[i] = money[i];Zhen +=  check(temp);Zhen += ZhenShuDanWei[5];}if(ZhenShu.length > 4) //万{if(ZhenShu.length > 8) //存在亿{char[] temp = new char[4];wlength = 4; //存在时记录万位的长度for(int i = 0; i < 4; i++) temp[i] = money[elength + i];Zhen +=  check(temp);Zhen += ZhenShuDanWei[4];}else{char[] temp = new char[ZhenShu.length - 4];wlength = ZhenShu.length - 4; //存在时记录万位的长度for(int i = 0; i < ZhenShu.length - 4; i++) temp[i] = money[i];Zhen +=  check(temp);Zhen += ZhenShuDanWei[4];}}// 千if(ZhenShu.length > 4) //存在万{char[] temp = new char[4];for(int i = 0; i < 4; i++) temp[i] = money[elength + wlength + i];Zhen +=  check(temp);Zhen += ZhenShuDanWei[0];}else{char[] temp = new char[ZhenShu.length];for(int i = 0; i < ZhenShu.length; i++) temp[i] = money[i];Zhen +=  check(temp);Zhen += ZhenShuDanWei[0];}char[] XiaoShu = new char[money.length - index - 1];System.arraycopy(money, index + 1, XiaoShu, 0, money.length - index - 1); //获取小数金额//System.out.println(XiaoShu);int isDigit = ((XiaoShu.length == 2) && (XiaoShu[0] == '0') && (XiaoShu[1] == '0')) ? 1 : 0; //金额是否是整数if(isDigit == 1) //如果是整数{Zhen += '整';return Zhen;}//处理小数else{if(XiaoShu.length == 2 && XiaoShu[1] == '0') //只有一位{Xiao += Shuzi[Integer.valueOf(XiaoShu[0]) - 48];Xiao += XiaoShuDanWei[0];}else if(XiaoShu.length == 2 && XiaoShu[0] == '0') //两位,第一位为0{Xiao += Shuzi[Integer.valueOf(XiaoShu[1]) - 48];Xiao += XiaoShuDanWei[1];}else //两位,都有数字{Xiao += Shuzi[Integer.valueOf(XiaoShu[0]) - 48];Xiao += XiaoShuDanWei[0];Xiao += Shuzi[Integer.valueOf(XiaoShu[1]) - 48];Xiao += XiaoShuDanWei[1];}return Zhen + Xiao;}} public static void main(String[] args){Scanner get = new Scanner(System.in);System.out.print("请输入需要转换的金额:");double num = get.nextDouble();if(num == 0.0) System.out.println("零元整"); //处理特殊情况else System.out.println(RMB.toString(num));get.close();}
}

java实验——中文大写金额相关推荐

  1. 《转载+完善》java实现中文大写金额转小写数字

    java实现中文大写金额转小写数字 原文地址:https://blog.csdn.net/Moneywa/article/details/97233159 上面原文博客,在处理 "叁拾壹亿叁 ...

  2. 【Java】将阿拉伯数字金额转化为中文大写金额表示

    今天老师即兴布置了一个作业,将阿拉伯数字金额转化为中文大写金额表示,假设数字上限为小于10亿,可以支持2位小数,如: 100000001--壹亿零壹元整 100100011--壹亿零壹拾万零壹拾壹元整 ...

  3. java 大写金额_java实现整数转化为中文大写金额的方法

    这篇文章主要介绍了java实现整数转化为中文大写金额的方法,感兴趣的小伙伴们可以参考一下 在日常生活中,我们经常会将阿拉伯数字转化为中文大写的情况:"零", "壹&quo ...

  4. java实现数字金额转换中文大写金额

    直接贴代码吧! public class CnNumberUtils {private final static Logger logger = LoggerFactory.getLogger(CnN ...

  5. 2-34 中文大写金额。声明RMB人民币类如下,实现其中成员方法。public class rMB // 人民币类 {// 返回金额x的中文大写形式字符串,如x=123 45,转化为“壹佰贰拾

    1.实验题目: 2-34 中文大写金额. 声明RMB人民币类如下,实现其中成员方法. public class rMB // 人民币类 { // 返回金额x的中文大写形式字符串,如x=123 45,转 ...

  6. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较...

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  7. 将阿拉伯数字转换成中文大写金额的形式

    问题:编写控制台程序,用户输入阿拉伯数字的金额,系统自动转换成中文大写金额的形式输出. 例如:输入458796: 转换为:肆拾伍万捌仟柒佰玖拾陆. 问题分析:既然是数字大小写转换,那么我们这样考虑问题 ...

  8. java 显示中文_java显示中文乱码的解决方法

    java显示中文乱码的解决方法 发布时间:2020-06-16 11:08:43 来源:亿速云 阅读:97 作者:Leah 这篇文章运用简单易懂的例子给大家介绍java显示中文乱码的解决方法,代码非常 ...

  9. java实验三_java实验三实验报告.docx

    java实验三实验报告.docx 实验报告课程名称面向对象课程设计实验项目名称类的继承班级与班级代码13计算机科学与技术1班实验室名称(或课室)SS1205专业计算机科学与技术任课教师尹华学号1225 ...

最新文章

  1. 【C++】浅析析构函数(基类中)为什么要写成虚基类?
  2. 在二叉树中找到累加和为指定值的最长路径长度
  3. 迅为linux下串口,迅为IMX6ULL开发板Linux RS232/485驱动实验(上)
  4. CAN总线-位时序、波特率、采样点
  5. js实现上传图片及时预览
  6. 简述JAVA线程调度的原理,Rxjava原理(二)--线程调度
  7. java计算器如何实现运算_用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢...
  8. vue 深度拷贝数组_前端深拷贝和浅拷贝
  9. Zabbix触发器和监控项设置时间范围.
  10. Java判断拼音的工具类
  11. dell电脑无法修复此计算机,不重装系统将DELL戴尔电脑恢复到出厂状态教程
  12. 清华计算机自主招生试题,清华、北大等高校历年自主招生试题及答案汇总
  13. 新人报道,请多多关照。
  14. python爬虫实战-bs4爬取2345电影
  15. 场效应晶体管在电路中的五大作用,你了解哪一种?
  16. 对于昨夜梦里对某外网电商平台web渗透测试总结体会
  17. 家用PC机打造VSphere5.1 测试环境:之部署VCenter Server 5.1
  18. 2021年数字IC秋招总结
  19. ORA-01000: maximum open cursors exceeded问题处理
  20. wireshark-协议分析【初见】(NBNS协议,SSDP协议、IGMPv2)

热门文章

  1. web前端php需要掌握吗,web前端需要学什么
  2. 量产充电机项目资料 900W 或 1Kw 20V-90V 10A 双管正激 可调电源 充电机 提供 PCB和程序,BOM,磁性器件,散热片规格书等 源文件
  3. 科笛集团冲刺港股:上半年亏2.5亿 红杉与云锋基金是股东
  4. 站在风口,你或许就是那年薪20w+的程序猿
  5. 用计算机处理信息的例子,用计算机解决生活中实际问题的方法--
  6. mysql alwayson_配置SQL Server 2012的AlwaysOn高性能组件
  7. 全球及中国针状焦市场供需竞争状况与投资风险分析报告2022年
  8. Quartz的基本使用
  9. 有道词典的划词搜索功能加入生成的百度链接
  10. Incorrect datetime value: '0000-00-00 00:00:00' for column 'hr519799901' at row 1