思路和具体方法都在注释中说明

package ClassicArithmetic;import java.util.Scanner;/** @author:LOHAS翀* @time:2019/11/1* * 人民币大小写转换(阿拉伯数字转汉字)* 要求:* 1)输入小写数字金额,输出大写汉字金额* 2)最大单位支持到亿,最小单位主持到分(即阿拉伯数字支持小数点后两位),超出范围输出错误提示* 3)对输入进行校验,不能出现运行错误* 4)符合人民币金额格式,如:亿/万/元等前不可出现零等* */
public class UnitTranslate {//定义数字对应的汉字public final static String[] num = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};//定义单位public final static String[] unit = {"", "拾", "佰", "仟"};public static void main(String[] args) {while (true) {try {System.out.println("请输入数字:");Scanner sc = new Scanner(System.in);String input = sc.next();//对数字进行整数和小数的分隔String[] numString = input.split("\\.");//若是整数则将其转换为有小数的数if (numString.length == 1) {input += ".0";numString = input.split("\\.");}//将整数进行分隔String[] zhengshu = numString[0].split("");//将数字前的0去掉while (zhengshu[0].equals("0") && zhengshu.length > 1) {String[] tmp = new String[zhengshu.length - 1];for (int i = 0; i < zhengshu.length - 1; i++) {tmp[i] = zhengshu[i + 1];}zhengshu = tmp;}//对小数进行分隔String[] xiaoshu = numString[1].split("");//若格式不对则抛出异常if (xiaoshu.length > 2 || numString.length != 2 || zhengshu.lenth > 12) {throw new Exception();} else if (xiaoshu.length == 1 && xiaoshu[0].equals("0")) {//小数部分为0的情况printInfo(zhengshu, xiaoshu);} else if (xiaoshu.length == 1 && !xiaoshu[0].equals("0")) {printInfo(zhengshu, xiaoshu);System.out.print(num[Integer.parseInt(xiaoshu[0])] + "角");} else if (xiaoshu.length == 2) {printInfo(zhengshu, xiaoshu);System.out.print(num[Integer.parseInt(xiaoshu[0])] + "角");System.out.print(num[Integer.parseInt(xiaoshu[1])] + "分");}break;} catch (NumberFormatException e) {System.out.println("输入有误");} catch (Exception e) {System.out.println("输入有误");}}}public static void printInfo(String[] zhengshu, String[] xiaoshu) {int tmp = 0; //该标志位用来记录对unit的操作地址int zeroNum = 0; //记录从右到左第5到第8位0的个数//数字为亿级if (zhengshu.length > 8) {for (int i = 0; i < zhengshu.length - 8; i++) {int nums = Integer.parseInt(zhengshu[i]);//判断相邻是否为0if (zhengshu[i].equals("0") && zhengshu[i + 1].equals("0") && i + 1 < zhengshu.length - 8) {continue;}//若0在级的最后一位则不输出if (i == zhengshu.length-8-1 &&zhengshu[zhengshu.length-8-1].equals("0")){break;}//若有相邻的0则输出最后一个0if (zhengshu[i].equals("0")) {System.out.print(num[nums]);} else {System.out.print(num[nums] + unit[zhengshu.length - 8 - 1 - i]);}}System.out.print("亿");for (int i = zhengshu.length - 8; i < zhengshu.length - 4; i++) {int nums = Integer.parseInt(zhengshu[i]);if (zhengshu[i].equals("0") && zhengshu[i + 1].equals("0") && i + 1 < zhengshu.length - 4) {tmp++;zeroNum++;continue;}if (i == zhengshu.length - 5 && zhengshu[zhengshu.length - 5].equals("0")) {break;}if (zhengshu[i].equals("0")) {System.out.print(num[nums]);tmp++;} else {System.out.print(num[nums] + unit[3 - tmp]);tmp++;}}if (zeroNum != 3) {System.out.print("万");}tmp = 0;for (int i = zhengshu.length - 4; i < zhengshu.length; i++) {int nums = Integer.parseInt(zhengshu[i]);if (i + 1 < zhengshu.length && zhengshu[i].equals("0") && zhengshu[i + 1].equals("0")) {tmp++;continue;}if (i == zhengshu.length - 1 && zhengshu[zhengshu.length - 1].equals("0")) {break;}if (zhengshu[i].equals("0")) {System.out.print(num[nums]);tmp++;} else {System.out.print(num[nums] + unit[3 - tmp]);tmp++;}}System.out.print("元");tmp = 0;} else if (zhengshu.length > 4) {  //数字为万级for (int i = 0; i < zhengshu.length - 4; i++) {int nums = Integer.parseInt(zhengshu[i]);if (zhengshu[i].equals("0") && zhengshu[i + 1].equals("0") && i + 1 < zhengshu.length - 4) {continue;}if (i == zhengshu.length - 4 -1 && zhengshu[zhengshu.length-4-1].equals("0")){break;}if (zhengshu[i].equals("0")) {System.out.print(num[nums]);} else {System.out.print(num[nums] + unit[zhengshu.length - 4 - 1 - i]);}}System.out.print("万");for (int i = zhengshu.length - 4; i < zhengshu.length; i++) {int nums = Integer.parseInt(zhengshu[i]);if (i + 1 < zhengshu.length && zhengshu[i].equals("0") && zhengshu[i + 1].equals("0")) {tmp++;continue;}if (i == zhengshu.length - 1 && zhengshu[zhengshu.length - 1].equals("0")) {break;}if (zhengshu[i].equals("0")) {System.out.print(num[nums]);tmp++;} else {System.out.print(num[nums] + unit[3 - tmp]);tmp++;}}System.out.print("元");tmp = 0;} else if (zhengshu.length <= 4) {for (int i = 0; i < zhengshu.length; i++) {int nums = Integer.parseInt(zhengshu[i]);if ( i + 1 < zhengshu.length && zhengshu[i].equals("0") && zhengshu[i + 1].equals("0")) {continue;}if (i == zhengshu.length-1 && zhengshu[zhengshu.length-1].equals("0")){break;}if (zhengshu[i].equals("0")) {System.out.print(num[nums]);} else {System.out.print(num[nums] + unit[zhengshu.length - 1 - i]);}}System.out.print("元");}}
}

Java实现人民币大小写转换相关推荐

  1. Oracle存储过程实现人民币大小写转换

    注意:当报如下错误时,是因为存储过程中定义的变量值太小,加大它的范围即可. Caused by: java.sql.SQLException: ORA-06502: PL/SQL: 数字或值错误 :  ...

  2. JavaScript实现人民币大小写转换

    当使用支票或者签署合同时,需要用到大写人民币,常用的中文大写包括零.壹.贰.叁.肆.伍.陆.柒.捌.玖.拾.佰.仟.万.亿.本文介绍下如何使用JavaScript实现将阿拉伯数字的人民币转换成大写. ...

  3. 人民币大小写转换格式

    <?php //****人民币大小写转换格式**** function ChangeToRMB($Val) { $str=array(); $str[0]="零"; $str ...

  4. 超强技巧分享,如何将人民币大小写转换?

    当我们在制作财务表格的时候,需要将金额的大写跟小写进行转换,如果要一个一个手打出来的话,那就太浪费时间了,一两个数额还好,如果一整个表格的数额,那就不得了了,那要花费多少时间才能将小写金额转换成大写金 ...

  5. JAVAScript实现人民币大小写转换算法

    大家好,我是梦辛工作室的灵,最近在写一个人民币大小写转换的工具,就把数字转换为大写中文 界面如下: 这样就很清楚了,做财务软件的时候应该会经常用到: 转换代码如下(是从右向左读): function ...

  6. java实现人民币数字转换中文大写的工具实例代码demo分享

    原文:java实现人民币数字转换中文大写的工具实例代码demo分享 http://www.zuidaima.com/share/1816208858221568.htm 刚好在项目里面用到了数字转化为 ...

  7. c语言人民币大小写转换,人民币大小写转换函数.xls

    人民币大小写转换函数.xls Sheet3 Sheet1 IF(A1=0,"",IF(ABS(A1)<0.995,"",TEXT(INT(ROUND(AB ...

  8. java人民币大小写转换_人民币大小写转换

    usingSystem;usingSystem.Text;usingSystem.Text.R using System; using System.Text; using System.Text.R ...

  9. java人民币大小写转换_Java 实现人民币小写转大写[转载http://sunjun.blogchina.com/]

    Java实现人民币小写转大写 import java.io.*; import java.util.*; import java.lang.*; public class money { public ...

最新文章

  1. python re match groups_python re.match与re.search的区别
  2. .net 基于Jenkins的自动构建系统开发
  3. MySQ软件的卸载-通过控制面板方式
  4. 生产环境遇到难题,你是如何解决的?
  5. 在C#中判断某个类是否实现了某个接口
  6. Selenium应用代码(常见封装的方法二)
  7. 看不出svp补帧_SVP4免费版|SVP4(视频补帧软件)下载v4.2.0.122免费版 附教程 - 欧普软件下载...
  8. C语言100ms周期运行时间不够,DEH-系统调研报告.docx
  9. 物联网大数据商业模式画布-0406-v1.1王玉娟
  10. Java模拟新浪微博登陆抓取数据
  11. notes系统服务器地址,在Notes客户端和Domino服务器上,服务器地址的缓存(Cache)存放在哪里...
  12. 数学家们是怎么玩趣味拼图游戏的?
  13. 【无标题】二进制STL文件解析 计算面积和体积与根据高度计算部分体积
  14. Genymotion模拟器的安装和使用
  15. 【转】中国人唯一不认可的成功——就是家庭的和睦,人生的平淡
  16. Android集成GMS服务及GMS认证方案
  17. .find()的用法
  18. 新手入门:圆角使用方法详解,圆角形成原理以及各个值的意义
  19. Adobe Photoshop CC 2019 for Mac(版本介绍)
  20. 防止表单重复提交的解决方案

热门文章

  1. 基于kubeadm 部署K8S1.22.3 踩坑
  2. 数据结构c语言程序杨辉三角,杨辉三角 --- C语言程序
  3. 计算机B级基金有哪些类型,分级b基金是什么
  4. html怎么写分享代码,怎么写一个文件分享网页?百度一键分享按钮HTML代码
  5. [Un-Routed Net Constraint Violation] 问题解决
  6. 社交类app 乱弹琴
  7. sql镶嵌查询_SQL 嵌套查询
  8. 【具体实现过程】百度地图POI区域的边界经纬度坐标数据采集
  9. 小小的纳豆居然有这么多好处,难怪岛国人为它疯狂
  10. 有一种蓝,是神往,是心醉,是心伤