`
yhman
  • 浏览: 12360 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

小写金额转变成大写金额(做报表显示金额问题)

J# 
阅读更多
(1).
public class XhgUtil{

	private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分";
	
	private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";
	
	private static final double MAX_VALUE = 9999999999999.99D;
	
	public static String change(double v){
		if(v < 0 || v > MAX_VALUE)
			return "参数非法!";
		long l = Math.round(v * 100);
		if(l == 0)
			return "零元整";
		String strValue = l + "";
		//i用来控制数
		int i = 0;
		//j用来控制单位
		int j = UNIT.length() - strValue.length();
		String rs = "";
		boolean isZero = false;
		for(;i < strValue.length(); i++,j++){
			char ch = strValue.charAt(i);
			
			if(ch == '0'){
				isZero = true;
				if(UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万' || UNIT.charAt(j) == '元'){
					rs = rs + UNIT.charAt(j);
					isZero = false;
				}
			}else{
				if(isZero){
				  rs = rs + "零";
				  isZero = false;
				}
				rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j);
			}		
		}
		
		if(!rs.endsWith("分")){		
			rs = rs + "整";			
		}	
		rs = rs.replaceAll("亿万","亿");
		return rs;
	}
	
	public static void main(String[] args){
		double val = Double.valueOf(12345.01);
		System.out.println(change(val));
		
	}
}


(2).
public class Test {

	private String getUnits(int i) {
		String s = "";
		switch (i) {
		case 2:
			s = "拾";
			break;
		case 3:
			s = "佰";
			break;
		case 4:
			s = "仟";
			break;
		case 5:
			s = "万";
			break;
		}
		return s;
	}

	private String getNum(int i) {
		String s = "零";
		switch (i) {
		case 1:
			s = "壹";
			break;
		case 2:
			s = "贰";
			break;
		case 3:
			s = "弎";
			break;
		case 4:
			s = "贰";
			break;
		case 5:
			s = "伍";
			break;
		case 6:
			s = "陆";
			break;
		case 7:
			s = "柒";
			break;
		case 8:
			s = "捌";
			break;
		case 9:
			s = "玖";
			break;
		}
		return s;
	}

	private String getPoint(int i) {
		String s = "";
		switch (i) {
		case 1:
			s = "分";
			break;
		case 2:
			s = "角";
			break;
		}
		return s;
	}

	private String compute(String args, String type) {
		String s = "";
		// 计算小数点前的数
		int length = args.length();
		for (int i = 0; i < args.length(); i++) {
			String unit = null;
			if (type.equals("Point")) {
				unit = getPoint(length);
			} else {
				unit = getUnits(length);
			}

			String sa0 = args.substring(i, i + 1);
			if (Integer.valueOf(sa0).intValue() != 0) {
				s += getNum(Integer.valueOf(sa0));
				s += unit;
			} else {
				if ((i + 1) != args.length()) {
					String next = args.substring(i + 1, i + 2);
					if (Integer.valueOf(next).intValue() != 0) {
						s += getNum(Integer.valueOf(sa0));
					}
				}
			}
			length--;
		}
		return s;
	}

	public String changeNumToUp(String amt) {
		String[] amts = amt.split("\\.");
		// 计算小数点前 数
		String s = "";
		String intPart = amts[0];
		if (intPart.length() <= 4) {
			s = compute(intPart, "INT");
		} else if (intPart.length() <= 8) {
			String preInt = intPart.substring(0, intPart.length() - 4);
			s = compute(preInt, "INT");
			String lastInt = intPart.substring(intPart.length() - 4);
			s += "万" + compute(lastInt, "INT");
		} else if (intPart.length() <= 12) {
			String prepInt = intPart.substring(0, intPart.length() - 8);
			s = compute(prepInt, "INT");
			String preInt = intPart.substring(intPart.length() - 8, intPart
					.length() - 4);
			s += "亿" + compute(preInt, "INT");
			String lastInt = intPart.substring(intPart.length() - 4);
			s += "万" + compute(lastInt, "INT");
		}
		if (amts.length == 1) {
			s += "元整";
		}
		// 计算小数点后的数
		if (amts.length == 1) {
			s += "元整";
		}
		// 计算小数点后的数
		if (amts.length > 1) {
			int pre = Integer.valueOf(amts[1]);
			if ((amts[1].length() == 1 || (amts[1].length() != 1) && pre == 0)) {
				s += "元整";
			} else {
				s += "元零";
			}
			s += compute(amts[1], "Point");
			s = s.replace("零零", "零");
		}

		return s;
	}

	public static void main(String[] args) {
		
		Test test = new Test();
		String amt = "12345.67";
		System.out.println(test.changeNumToUp(amt));
	}
}


顯示: 壹万贰仟弎佰贰拾伍元零陆角柒分
分享到:
评论

相关推荐

    小写金额转换成大写金额

    在IT行业中,尤其是在财务软件开发或者处理金融数据时,经常需要将小写金额转换成大写金额,以便于正式的财务报表和凭证的制作。在编程中,这种转换通常通过编写特定的函数来实现。本篇文章将详细讲解如何用PB...

    C#小写金额转换大写金额

    C#将小写金额转换成大写,很高兴能与大家分享我的资源

    js_小写金额转大写金额,大写转小写.js

    通过js代码将小写金额转换成大写金额,将大写金额转换成数字

    小写金额转换成大写金额源代码

    在IT行业中,编程时常涉及到各种数据格式的转换,其中一种常见的需求是将小写的数字金额转换为财务报表中常用的大写格式。这个过程通常是为了确保财务记录的清晰度和准确性,因为大写数字在视觉上更不容易被篡改。...

    人民币小写金额转大写金额(java版)

    ### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...

    小写金额转换为大写金额

    在金融和会计领域,金额通常会以两种形式存在:小写和大写。小写金额是常规的数字表示,如123456.78;而大写金额则是为了防止篡改和提高凭证的正式性,常用于支票、合同等正式文档中,例如“壹拾贰万叁仟肆佰伍拾陆...

    小写金额转换成大写金额源码1.0

    在描述中提到的"1.01版"更新可能解决了"小写金额转换成大写金额源码1.0"存在的问题,这可能是对某些特定情况的优化,或者修复了可能导致错误的bug,以提高转换的准确性和可靠性。 在开发这样的程序时,还需要考虑...

    JAVA大写金额转化为小写金额

    用JAVA书写的一个大写金额转化为小写金额的类

    小写金额转换成大写金额1.01

    "小写金额转换成大写金额1.01"可能是一个程序或函数,其主要功能就是解决这个问题。下面我们将详细讨论相关的知识点。 首先,小写金额通常以数字形式表示,例如10,023,543,423.23,而大写金额则使用汉字字符进行...

    小写金额转换大写金额

    小写金额转换大写金额,小写金额转换大写金额.

    c语言小程序(人民币小写金额转换成大写金额)

    在C语言编程中,开发一个小程序来将人民币的小写金额转换为大写金额是一项常见的任务,尤其在财务软件或银行系统中。这个程序的核心在于理解人民币金额的表示规则,并将其与C语言的数据处理和字符串操作相结合。下面...

    oracle中将小写金额转换为大写金额函数

    这个函数不仅可以用于财务报表的生成,还可以应用于各种需要格式化显示金额的应用场景。此外,通过适当的调整,这个函数还可以进一步扩展以支持更多的需求,比如支持更多货币单位或更复杂的格式化选项。

    小写金额转大写

    在IT行业中,编程语言Java是广泛使用的,尤其在金融、财务等领域,经常需要将小写的金额转换为大写的汉字表示,以满足规范的财务报告需求。这个“小写金额转大写”的主题就涉及到这样的一个功能实现。在这个压缩包...

    VB 将小写金额转换成大写金额

    将小写金额转换成大写金额是常见的需求,主要是为了方便阅读和核对,尤其是在中国,大写金额在正式的财务文档中是标准格式。下面我们将详细讨论如何在VB中实现这个功能。 首先,我们要理解小写金额和大写金额的区别...

    把大写金额转换成小写的

    总结起来,大写金额转换成小写是金融数据处理的一个基础环节,涉及到对数字和单位的理解,以及适当的算法设计。通过学习和掌握这一技能,我们可以更好地处理与财务相关的数据,提高工作效率,同时降低出错风险。

    js实现将小写金额转化为大写金额

    大写金额主要用于正式的财务报表和发票,以提高数据的清晰度和准确性。下面我们将深入探讨如何利用JavaScript实现这个功能。 首先,我们需要了解小写金额和大写金额的转换规则。在中国的会计体系中,小写金额通常指...

    小写金额转换成大写

    小写金额转换成大写,如943.35转换后 玖佰肆十叁圆叁角伍分

Global site tag (gtag.js) - Google Analytics