`
gogoyoyo
  • 浏览: 35818 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java金额转大写程序

    博客分类:
  • Java
阅读更多

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金额转换小程序

    大写金额转换

    看到网上有很多这样的例子程序,不过觉得很不满意。... * 序我没有用什么很精妙的算法,不过用了一些Java类库中的类,像是正则表达式之类 * 的东西。由于本人对算法不怎么在行,在做转换操作的时候用的是很笨的方法

    人民币大小写转换

    Java中关于金额小写转换为大写的工具类

    js金额小写转大写脚本

    工作中的经典代码,包括ftp下载程序。java

    ATM自动取款机&金额转换成大写

    该程序用java语言实现,编译环境Myecilpse,模拟自动取款机,用图形用户界面实现!分别实现:存款,取款,显示余额,修改密码,退出登录,退出系统等功能!并且能够吧交易金额转换成大写表示形式

    java写的金额转换器,双击可直接运行

    用Java写的一小程序,已打包成jar包,双击rm2.bat即可运行(当然得有jdk和环境变量设置好)。 完成将数字转换成中文大写金额,数量可以为任何位数,超过亿位,小数只取前两位。

    Java经典编程源码基础例程300.zip

    Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 实例001 输出“Hello World” 2 ...实例080 货币金额大写格式 123 实例081 String类格式化当前日期 125 实例082 字符串大小写转换 1

    发票打印小程序

    是一个小的输出发票java程序,可以将数字转换成大写的数字如10010转换为壹万零一十圆

    test_java.rar_Java 8

    5、 输出金额的中文大写形式 6、 实现一个复数类 7、 实现一个银行账户类 8、 编写程序实现判断及识别标识符的功能 9、 实现一个计算器 10、 编程实现一个用户登录窗口,其中用户名要求为10位的数字,且第一个数字不...

    《数据结构Java版》习题解答..doc

    第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开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例062 货币金额大写格式 78 实例063 String类格式化当前日期 80 实例064 字符串大小写转换 82 实例065 字符与Unicode码的转换 83 4.2 辨别字符串 84 实例066 判断用户名是否正确 84 实例067 用户名排序 85 实例068...

    数据结构(Java版)(第2版)习题解答

    第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 所有类等的名称首字母大写,变量名函数、的首字母小写、如名称中含有多个单词,则每个单词首字母大写,其余小写,单词间不用下划线(_)等分隔。...

    Grid++Report6 报表开发者安装包

    11、全中文界面,针对中国式报表进行了很多专门实现,如:表格报表、财务金额线、大写金额、发票圈叉图标、负数红字、多层表头等。很多在国外报表工具中很难实现的功能都可以轻易实现。 12、提供丰富交互事件,轻松...

    Grid++Report5.6报表开发工具

    11、全中文界面,针对中国式报表进行了很多专门实现,如:表格报表、财务金额线、大写金额、发票圈叉图标、负数红字、多层表头等。很多在国外报表工具中很难实现的功能都可以轻易实现。 12、提供丰富交互事件,轻松...

    Grid++Report5.5报表工具

    11、全中文界面,针对中国式报表进行了很多专门实现,如:表格报表、财务金额线、大写金额、发票圈叉图标、负数红字、多层表头等。很多在国外报表工具中很难实现的功能都可以轻易实现。 12、提供丰富交互事件,轻松...

Global site tag (gtag.js) - Google Analytics