Java人民币小写转大写字符串的实现
作者:丶安格拉丶 发布时间:2021-10-24 00:52:34
标签:Java,人民币,字符串
写了一个人民币小写转大写的方法,Java版本,思路很简单,没有测出什么Bug,有bug欢迎反馈
public class RMBChange {
private static String[] nums = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
// 单位还可以往上
private static String[] unit = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万"};
// 小数位如还有需求可以直接往这个数组里加,
private static String[] countNum = {"角", "分"};
public static String change(String money) {
// 过滤空
if (money == null || "".equals(money)) {
return "";
}
StringBuilder res = new StringBuilder();
String[] splitStr = money.split("\\.");
if (splitStr.length > 2) {
throw new RuntimeException("输入的参数不是数字!");
}
String front = splitStr[0];
// 用于判定0的显示
boolean isZero = true;
if (front.length() > unit.length) {
throw new RuntimeException("输入的参数大于万亿!");
}
for (int i = 0; i < front.length(); i++) {
// 整数位处理
int dw = front.length() - i - 1;
// 用ASCII码获得数字
int index = (front.charAt(i) - '0');
if (index == 0) {
isZero = true;
if (dw == 0 || dw == 4 || dw == 8) {
// 元,万,亿需要拼接
res.append(unit[dw]);
}
} else {
if (isZero && i != 0) {
// 多个0只显示一个
res.append(nums[0]);
}
isZero = false;
res.append(nums[index]);
res.append(unit[dw]);
}
}
// 判断是否有小数位
if (splitStr.length > 1) {
// 小数位处理,如果不需要则直接删除这个if及内部所有内容
isZero = true;
String back = splitStr[1];
if (back.length() > countNum.length) {
throw new RuntimeException("小数位小于【" + countNum[countNum.length - 1] + "】!");
}
for (int i = 0; i < back.length(); i++) {
int index = (back.charAt(i) - '0');
if (index == 0) {
isZero = true;
} else {
if (isZero && i != 0) {
res.append(nums[0]);
}
isZero = false;
res.append(nums[index]);
res.append(countNum[i]);
}
}
}
return res.toString();
}
}
测试数据
public static void main(String[] args) {
System.out.println(change("9999999999999.99")); // 玖万玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖元玖角玖分
System.out.println(change("5020055606500.00")); // 伍万零贰佰亿零伍仟伍佰陆拾万零陆仟伍佰元
System.out.println(change("4001500050.16")); // 肆拾亿零壹佰伍拾万零伍拾元壹角陆分
System.out.println(change("7854416")); // 柒佰捌拾伍万肆仟肆佰壹拾陆元
System.out.println(change("9556")); // 玖仟伍佰伍拾陆元
System.out.println(change("10086.0")); // 壹万零捌拾陆元
System.out.println(change("263341.26")); // 贰拾陆万叁仟叁佰肆拾壹元贰角陆分
System.out.println(change("3651.06")); // 叁仟陆佰伍拾壹元零陆分
System.out.println(change("1.00")); // 壹元
System.out.println(change("300.00")); // 叁佰元
System.out.println(change("2007.01")); // 贰仟零柒元零壹分
}
输出结果
玖万玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖元玖角玖分
伍万零贰佰亿零伍仟伍佰陆拾万零陆仟伍佰元
肆拾亿零壹佰伍拾万零伍拾元壹角陆分
柒佰捌拾伍万肆仟肆佰壹拾陆元
玖仟伍佰伍拾陆元
壹万零捌拾陆元
贰拾陆万叁仟叁佰肆拾壹元贰角陆分
叁仟陆佰伍拾壹元零陆分
壹元
叁佰元
贰仟零柒元零壹分
来源:https://blog.csdn.net/qq_39579105/article/details/115761313


猜你喜欢
- Java通过证书访问Https请求创建证书管理器类import java.io.FileInputStream;import java.se
- 一、需要导入的jar1.commons-collections4-4.1.jar2.poi-3.17-beta1.jar3.poi-ooxm
- 前言作为一个新手,最近在学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站。第一次搞爬虫,涉及到了网
- JAVA反射机制JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方
- 一、线程间的共享1.1 ynchronized内置锁用处Java支持多个线程同时访问一个对象或者对象的成员变量关键字synchronized
- 获取整个屏幕的宽度的实例Point p = new Point();//获取窗口管理器WindowManager wm = (WindowM
- 本文为大家解析了java原码补码反码的关系,供大家参考,具体内容如下原码:不管源数据是十进制还是十六进制,统统将数字转成二进制形式反码:把原
- 1、引例class Complex{private: double Real,Image;public: &nbs
- 要求:如下图,使用线程操作 1、实时显示当前时间 2、输入加数和被加数,自动出现结果 分析:两个问题解决的方式一致,使用子线程进
- 在源码的阅读过程中,可以了解别人实现某个功能的涉及思路,看看他们是怎么想,怎么做的。接下来,我们看看这篇Java源码解析之object的详细
- 前言传统的Restful API 存在诸多的问题,首先它无法控制返回的字段,前端也无法预判后端的返回结果,另外不同的返回结果对应不同的请求地
- 三层架构将整个业务应用划分为:(1)界面UI层(2)业务逻辑层(3)数据访问层对于复杂的系统分层可以让结构更加清晰,模块更加独立,便于维护。
- 在Android程序中很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabAct
- 这里介绍通过委托取消Button事件switch-case的方法。需要注意的是,事先要按顺序在各个Button的Tag属性中设置0、1、2、
- 目录1、前提知识2、实现思路:1、前提知识需要知道简单的IO流操作,以及简单的UDP发送数据包的原理。需要用到的类:DatagramSock
- 一、文件上传原理 1、文件上传的前提:a、form表单的method必须是postb、form表单的enctype必须是multi
- 数据库中记录了商家在百度标注的经纬度(如:116.412007, 39.947545)最初想法,以圆心点为中心点,对半径做循环,半径每增加一
- Eclipse ADT的Custom debug keystore自定义调试证书的时候,Android应用开发接入各种SDK时会发现,有很多
- 本文实例为大家分享了Android实现记住账号密码的具体代码,供大家参考,具体内容如下布局一个复选框<CheckBox
- Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都会有各自的用途,以及创建和销毁的时间,有的区