java写了一个金额转大写程序,最大值到千亿,保留2位小数
经初步测试结果正确,不过写法好像比较笨,请各位大侠指教
功能满足:
1. 金额为整数时,只表示整数部分,后面加“整”
2. 连续的“0”,只写一个“零”
3. 整数后尾数0省略,如100表示成“壹佰元整”
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Scanner;
/*
* 1. 金额为整数时,只表示整数部分,后面加“整”
2. 连续的“0”,只写一个“零”
3. 整数后尾数0省略,如100表示成“壹佰元整”
4. 四舍五入到分
5. 最大范围到千亿(12位)
*/
public class MoneyToUppercase {
static HashMap<Integer, String> hm = new HashMap<Integer, String>();
static String toUpper(String num){
hm.put(0, "零");
hm.put(1, "壹");
hm.put(2, "贰");
hm.put(3, "叁");
hm.put(4, "肆");
hm.put(5, "伍");
hm.put(6, "陆");
hm.put(7, "柒");
hm.put(8, "捌");
hm.put(9, "玖");
hm.put(10, "拾");
hm.put(100, "佰");
hm.put(1000, "仟");
hm.put(10000, "万");
String snum = num;
String intpart =null;
String decpart = null;
String dec0 = null;
String dec1 = null;
String hasdec = null;
String[] sa = new String[2];
sa = snum.split("\\.");
intpart = sa[0];
decpart = sa[1];
String[] sint = intpart.split(""); //整数部分
switch(sint.length){
case 2: snum = hm.get(Integer.parseInt(sint[1])); break;
case 3: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(10) + hm.get(Integer.parseInt(sint[2])); break;
case 4: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(100) + hm.get(Integer.parseInt(sint[2])) + hm.get(10) + hm.get(Integer.parseInt(sint[3]));break;
case 5: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(1000) + hm.get(Integer.parseInt(sint[2])) + hm.get(100) + hm.get(Integer.parseInt(sint[3])) + hm.get(10) + hm.get(Integer.parseInt(sint[4]));break;
case 6: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(10000) + hm.get(Integer.parseInt(sint[2])) + hm.get(1000) + hm.get(Integer.parseInt(sint[3])) + hm.get(100) + hm.get(Integer.parseInt(sint[4])) + hm.get(10) + hm.get(Integer.parseInt(sint[5]));break;
case 7: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(10) +hm.get(Integer.parseInt(sint[2])) + hm.get(10000) + hm.get(Integer.parseInt(sint[3])) + hm.get(1000) + hm.get(Integer.parseInt(sint[4])) + hm.get(100) + hm.get(Integer.parseInt(sint[5])) + hm.get(10) + hm.get(Integer.parseInt(sint[6]));break;
case 8: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(100) +hm.get(Integer.parseInt(sint[2])) + hm.get(10) +hm.get(Integer.parseInt(sint[3])) + hm.get(10000) + hm.get(Integer.parseInt(sint[4])) + hm.get(1000) + hm.get(Integer.parseInt(sint[5])) + hm.get(100) + hm.get(Integer.parseInt(sint[6])) + hm.get(10) + hm.get(Integer.parseInt(sint[7]));break;
case 9: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(1000) +hm.get(Integer.parseInt(sint[2])) + hm.get(100) +hm.get(Integer.parseInt(sint[3])) + hm.get(10) +hm.get(Integer.parseInt(sint[4])) + hm.get(10000) + hm.get(Integer.parseInt(sint[5])) + hm.get(1000) + hm.get(Integer.parseInt(sint[6])) + hm.get(100) + hm.get(Integer.parseInt(sint[7])) + hm.get(10) + hm.get(Integer.parseInt(sint[8]));break;
case 10: snum = hm.get(Integer.parseInt(sint[1])) + "亿" + hm.get(Integer.parseInt(sint[2])) + hm.get(1000) +hm.get(Integer.parseInt(sint[3])) + hm.get(100) +hm.get(Integer.parseInt(sint[4])) + hm.get(10) +hm.get(Integer.parseInt(sint[5])) + hm.get(10000) + hm.get(Integer.parseInt(sint[6])) + hm.get(1000) + hm.get(Integer.parseInt(sint[7])) + hm.get(100) + hm.get(Integer.parseInt(sint[8])) + hm.get(10) + hm.get(Integer.parseInt(sint[9]));break;
case 11: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(10) + hm.get(Integer.parseInt(sint[2])) + "亿" + hm.get(Integer.parseInt(sint[3])) + hm.get(1000) +hm.get(Integer.parseInt(sint[4])) + hm.get(100) +hm.get(Integer.parseInt(sint[5])) + hm.get(10) +hm.get(Integer.parseInt(sint[6])) + hm.get(10000) + hm.get(Integer.parseInt(sint[7])) + hm.get(1000) + hm.get(Integer.parseInt(sint[8])) + hm.get(100) + hm.get(Integer.parseInt(sint[9])) + hm.get(10) + hm.get(Integer.parseInt(sint[10]));break;
case 12: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(100) + hm.get(Integer.parseInt(sint[2])) + hm.get(10) + hm.get(Integer.parseInt(sint[3])) + "亿" + hm.get(Integer.parseInt(sint[4])) + hm.get(1000) +hm.get(Integer.parseInt(sint[5])) + hm.get(100) +hm.get(Integer.parseInt(sint[6])) + hm.get(10) +hm.get(Integer.parseInt(sint[7])) + hm.get(10000) + hm.get(Integer.parseInt(sint[8])) + hm.get(1000) + hm.get(Integer.parseInt(sint[9])) + hm.get(100) + hm.get(Integer.parseInt(sint[10])) + hm.get(10) + hm.get(Integer.parseInt(sint[11]));break;
case 13: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(1000) + hm.get(Integer.parseInt(sint[2])) + hm.get(100) + hm.get(Integer.parseInt(sint[3])) + hm.get(10) + hm.get(Integer.parseInt(sint[4])) + "亿" + hm.get(Integer.parseInt(sint[5])) + hm.get(1000) +hm.get(Integer.parseInt(sint[6])) + hm.get(100) +hm.get(Integer.parseInt(sint[7])) + hm.get(10) +hm.get(Integer.parseInt(sint[8])) + hm.get(10000) + hm.get(Integer.parseInt(sint[9])) + hm.get(1000) + hm.get(Integer.parseInt(sint[10])) + hm.get(100) + hm.get(Integer.parseInt(sint[11])) + hm.get(10) + hm.get(Integer.parseInt(sint[12]));break;
}
snum += "元";
snum = snum.replaceAll("零仟", "");
snum = snum.replaceAll("零佰", "零");
snum = snum.replaceAll("零拾", "");
snum = snum.replaceAll("零零亿", "亿");
snum = snum.replaceAll("零亿", "亿");
snum = snum.replaceAll("零零万", "万");
snum = snum.replaceAll("零万", "万");
snum = snum.replaceAll("亿万", "亿");
snum = snum.replaceAll("零零元", "元");
snum = snum.replaceAll("零元", "元");
if(snum.startsWith("元"))
snum="零" + snum;
// System.out.println(snum);
String[] sdec = decpart.split(""); //小数部分
if(sdec[1].equals("0")&&sdec[2].equals("0"))
{
hasdec = "整";
snum += hasdec;
}
else{
if(sdec[1].equals("0"))
dec0 = "零";
else dec0 = hm.get(Integer.parseInt(sdec[1])) + "角";
if(sdec[2].equals("0"))
dec1 = "";
else dec1 = hm.get(Integer.parseInt(sdec[2])) + "分";
snum += dec0+dec1;
}
return snum;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Input a number less than 1000000000000:");
double num = new Scanner(System.in).nextDouble();
if(num>=1e12){
System.out.println("Out of range!");
}else if(num<0) System.out.println("Nagative number");
else{
String snum = new DecimalFormat("0.00").format(num);//四舍五入保留两位小数
System.out.println(snum);
String result = MoneyToUppercase.toUpper(snum);
System.out.println(result);
}
}
}
分享到:
相关推荐
用java代码 实现金额阿拉伯数字 转成 中文汉字大写形式
java金额转换小程序
看到网上有很多这样的例子程序,不过觉得很不满意。... * 序我没有用什么很精妙的算法,不过用了一些Java类库中的类,像是正则表达式之类 * 的东西。由于本人对算法不怎么在行,在做转换操作的时候用的是很笨的方法
Java中关于金额小写转换为大写的工具类
工作中的经典代码,包括ftp下载程序。java
该程序用java语言实现,编译环境Myecilpse,模拟自动取款机,用图形用户界面实现!分别实现:存款,取款,显示余额,修改密码,退出登录,退出系统等功能!并且能够吧交易金额转换成大写表示形式
用Java写的一小程序,已打包成jar包,双击rm2.bat即可运行(当然得有jdk和环境变量设置好)。 完成将数字转换成中文大写金额,数量可以为任何位数,超过亿位,小数只取前两位。
Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 实例001 输出“Hello World” 2 ...实例080 货币金额大写格式 123 实例081 String类格式化当前日期 125 实例082 字符串大小写转换 1
是一个小的输出发票java程序,可以将数字转换成大写的数字如10010转换为壹万零一十圆
5、 输出金额的中文大写形式 6、 实现一个复数类 7、 实现一个银行账户类 8、 编写程序实现判断及识别标识符的功能 9、 实现一个计算器 10、 编程实现一个用户登录窗口,其中用户名要求为10位的数字,且第一个数字不...
第0章 Java程序设计基础 1 【习0.1】 实验0.1 哥德巴赫猜想。 1 【习0.2】 实验0.2 杨辉三角形。 1 【习0.3】 实验0.3 金额的中文大写形式。 1 【习0.4】 实验0.4 下标和相等的数字方阵。 1 【习0.5】 实验0.5 找出...
实例062 货币金额大写格式 78 实例063 String类格式化当前日期 80 实例064 字符串大小写转换 82 实例065 字符与Unicode码的转换 83 4.2 辨别字符串 84 实例066 判断用户名是否正确 84 实例067 用户名排序 85 实例068...
第0章 Java程序设计基础 1 【习0.1】 实验0.1 哥德巴赫猜想。 1 【习0.2】 实验0.2 杨辉三角形。 1 【习0.3】 实验0.3 金额的中文大写形式。 1 【习0.4】 实验0.4 下标和相等的数字方阵。 1 【习0.5】 实验0.5 找出...
三、环境及命名标准 环境:Java:JDK 1.6 SQL:4 所有类等的名称首字母大写,变量名函数、的首字母小写、如名称中含有多个单词,则每个单词首字母大写,其余小写,单词间不用下划线(_)等分隔。...
11、全中文界面,针对中国式报表进行了很多专门实现,如:表格报表、财务金额线、大写金额、发票圈叉图标、负数红字、多层表头等。很多在国外报表工具中很难实现的功能都可以轻易实现。 12、提供丰富交互事件,轻松...
11、全中文界面,针对中国式报表进行了很多专门实现,如:表格报表、财务金额线、大写金额、发票圈叉图标、负数红字、多层表头等。很多在国外报表工具中很难实现的功能都可以轻易实现。 12、提供丰富交互事件,轻松...
11、全中文界面,针对中国式报表进行了很多专门实现,如:表格报表、财务金额线、大写金额、发票圈叉图标、负数红字、多层表头等。很多在国外报表工具中很难实现的功能都可以轻易实现。 12、提供丰富交互事件,轻松...