`
zsmud
  • 浏览: 73397 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

JAVA写的中文金额转换程序

 
阅读更多
闲来无事,突然想自己写个中文金额转换程序,想做到简洁高效优雅,看似简单的需求,做起来不一定就容易,特别是对于中间多个零的情况,还有单位换算。
package com.zsmud.ui;

import java.math.BigInteger;
import java.text.DecimalFormat;

/**
 * 最大到九千兆之上
 * @author Zhengsm
 * @date 2012/12/10
 */
public class ToChineseAmount {
	
	private static char[] chineseAmt = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
	private static char[] units = {'拾','佰','仟'};//i=1,i=2,i=3,i=5,i=6,i=7,i=9,i=10,i=11
	private static char[] chineseUnits = {'元','万','亿','兆'};//i=0,i=4,i=8,
	private static char[] smallUnits = {'分','角'};
	
	public static String formatInt(BigInteger num) {
		if(num.equals(BigInteger.ZERO)) return "零元";
		if(num.toString().length()>16) throw new RuntimeException("too max num");
		StringBuffer result = new StringBuffer("");
		BigInteger radix = new BigInteger("10");
		int i=0;
		char preChar = 0;
		while(num.compareTo(BigInteger.ZERO)==1){			
			StringBuffer tmp = new StringBuffer();
			BigInteger rest = num.mod(radix);
			num = num.divide(radix);
			if(rest.equals(BigInteger.ZERO) && preChar!='零' && inArray(chineseAmt,preChar)){
				tmp.append('零');
			}else if(!rest.equals(BigInteger.ZERO)){
				tmp.append(chineseAmt[rest.intValue()]);
				if(i%4!=0) tmp.append(units[i%4-1]);
			}
			if(i%4==0) {
				if(tmp.length()>0 && tmp.charAt(0)=='零') 
					tmp.insert(0, chineseUnits[i/4]);
				else
					tmp.append(chineseUnits[i/4]);
			}
			preChar = tmp.length()>0? tmp.charAt(0):0;
			i++;
			result.insert(0, tmp);
		}
		
		return result.toString();
	}
	
	public static String formatSmall(int small){
		if(small>100) throw new RuntimeException("too small");
		StringBuffer result = new StringBuffer("");
		char preChar = 0;
		int i=0;
		while(small>0){
			StringBuffer tmp = new StringBuffer();
			int rest = small%10;
			small = small/10;
			if(rest==0 && preChar!='零' && inArray(chineseAmt,preChar)){
				tmp.append('零');
			}else if(rest!=0){
				tmp.append(chineseAmt[rest]);
				tmp.append(smallUnits[i]);
			}
			preChar = tmp.length()>0? tmp.charAt(0):0;
			i++;
			result.insert(0, tmp);
		}
		return result.toString();
	}
	
	private static boolean inArray(char[] array,char c){
		for(char ch : array){
			if(ch == c) return true;
		}
		return false;
	}
	
	public static String format(double num){
		DecimalFormat df = new DecimalFormat("#.00");
		String input = df.format(num);
		StringBuffer sb = new StringBuffer();
		if(input.indexOf('.')!=-1) {
			sb.append(formatInt(new BigInteger(input.substring(0, input.indexOf('.')))));
			sb.append(formatSmall(Integer.parseInt(input.substring(input.indexOf('.')+1))));
		}
		return sb.toString();
	}
	
	public static void main(String[] args){
		System.out.println(formatInt(new BigInteger("909")));
		System.out.println(formatInt(new BigInteger("9009")));
		System.out.println(formatInt(new BigInteger("9099")));
		System.out.println(formatInt(new BigInteger("909099")));
		System.out.println(formatInt(new BigInteger("909909")));
		System.out.println(formatInt(new BigInteger("909999")));
		System.out.println(formatInt(new BigInteger("90909999")));
		System.out.println(formatInt(new BigInteger("900090019001921")));
		System.out.println(formatInt(new BigInteger("900090009000")));
		System.out.println(formatInt(new BigInteger("90909000")));
		System.out.println(formatInt(new BigInteger("90999009")));
		System.out.println(formatInt(new BigInteger("909009009")));
		System.out.println(formatInt(new BigInteger("9009909009009")));
		System.out.println(formatInt(new BigInteger("9009009909009009")));
		System.out.println(formatSmall(78));
		System.out.println(format(9999990999999.99));
		System.out.println(format(9999990999999.00));
	}

}

分享到:
评论

相关推荐

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

    本项目是一个基于Java开发的金额转换工具,它能够帮助用户将数字转化为中文大写金额,这对于财务报告或者会计操作非常有用。下面我们将详细讨论这个程序的工作原理、实现方式以及使用步骤。 首先,我们要理解的是...

    金额转换程序java

    【标题】"金额转换程序Java"的实现是一个基础但实用的编程示例,它主要针对的是将数字金额转换为中文大写的表示方式。在金融、会计等领域,中文大写金额的表示是常见的需求,用于避免数字混淆,提高账目核对的准确性...

    java 实现 金额转成中文大写形式

    在Java编程中,将金额的阿拉伯数字转换为中文汉字大写是常见的财务处理需求,主要用于防止数字篡改,增加财务数据的安全性和准确性。这个过程通常称为金额数字化,它涉及到将小数点、整数和小数部分分别转换,并且...

    java写的货币转换

    在这个特定的场景中,我们关注的是如何使用Java来实现货币转换的功能,特别是将数字转化为大写汉字,这是财务和会计领域中常见的需求,以确保金额的清晰性和准确性。 货币转换涉及到的主要知识点包括: 1. **数字...

    java写的把数字转化成英语的工具

    有些变态的报表需要把数字转换成英文输出,但愿这个能帮得到你 one hundred eighty-eight thousand, eight hundred one hundred eighty-eight thousand, eight hundred one one hundred eighty-eight thousand, ...

    java写的将阿拉伯数字转化为中文金额的大写方式

    这个题目要求实现一个程序,能够读取输入的阿拉伯数字字符串,然后将其转换为符合中国会计规范的中文大写金额表示。在这个过程中,我们需要处理整数部分、小数部分以及各种可能的零、负号等特殊情况。 首先,我们要...

    Java将数字金额转为大写中文金额

    其核心功能是将阿拉伯数字表示的金额转换成中文大写形式,以满足财务凭证、支票、合同等文档中的金额书写规范。下面将详细介绍实现这一功能所需的关键知识点和相关代码。 首先,我们需要定义一些基础数据。在Java...

    java金额转换,阿拉伯数字转换成中国传统形式。

    2. **创建数字与汉字映射**:创建一个字符串数组,存储0-9对应的中文汉字,如{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}。 3. **处理零**:在转换过程中,我们需要特别注意“零”的处理。如果...

    java金额转大小写很详细

    此程序的主要目的是为了在财务、会计等场景下能够准确地将数字形式的金额转换成汉字大写形式,这对于正式文件如发票、合同等非常重要。 ### 主要知识点 #### 1. **正则表达式的应用** - **`AMOUNT_PATTERN`**:...

    java金额转大写

    在财务处理、票据填写等场景中,经常需要将阿拉伯数字表示的金额转换为汉字大写形式。这不仅可以提高正式文档的专业性,还可以避免因数字篡改而产生的纠纷。本知识点将详细介绍如何利用Java编程语言实现这一功能。 ...

    JAVA实现数字大写金额转换的方法

    在财务报告或银行系统中,将阿拉伯数字金额转换为中文大写金额是一个常见的需求,这不仅提高了信息的可读性,还增强了数据的安全性,因为在金融领域,对于大额交易的书写和审核更为严谨,使用中文大写金额形式可以...

    基于Java语言的简化人民币金额大写转换工具设计源码

    5个Java源码文件,包含了该工具的核心功能实现,包括金额转换的算法等;还有5个文本说明文件,这些文件可能为用户提供了如何使用该软件的指南或是开发者在开发过程中的一些记录;3个JAR库文件,可能包含了项目所依赖...

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

    关于金额转换成大写,这是一个额外的功能,用于满足金融交易中对金额表示的规范性要求。在Java中,可以编写一个辅助方法,将数字转换为中文大写的表示,例如“壹”、“贰”等。这个过程可能涉及到字符串处理和数字...

    人民币大小写转换java完美版(媲美商用版)

    本示例中的"人民币大小写转换java完美版"就是一个典型的实例,它解决了在Java编程中将数字金额转换为大写的汉字金额,这对于银行系统、财务软件或上机作业来说是至关重要的功能。下面我们将深入探讨这个主题,讲解...

    Java方法小写转换大写人民币

    在财务处理、银行系统等业务场景中,经常需要将数字金额转换为中文大写形式,特别是对于精确度较高的金额(如万亿级别的金额)。这种转换有助于提高正式文档的可读性与规范性。Java作为一种广泛使用的编程语言,在...

    java 数字转化为人民币大写

    在金融、会计等场景下,经常需要将数字金额转换为人民币大写的格式,以满足正式文档、合同或发票的需求。本文将详细介绍如何使用Java实现这一功能,支持一亿以内的数字转化,确保准确无误地进行金额的汉字表示。 ##...

    人民币大写转换程序(非常好用)

    这个程序设计的目的是将阿拉伯数字形式的人民币金额转换成规范的大写汉字形式,以便于财务报表的标准化和防止篡改。在会计和金融业务中,使用大写的汉字可以增加金额的可读性,并且在法律上具有更高的权威性。 ...

    将数字转为中文金额的大写方式(Java版)

    本篇文章主要探讨的是如何使用Java实现数字到中文金额大写的转换。 首先,`Trans2RMB.java`是这个功能的核心源代码文件,它包含了处理数字转换的具体逻辑。在Java中,我们可以创建一个方法,接受一个整数或浮点数...

    Java实现人民币大写+GUI界面

    在Java编程语言中,开发一个GUI(图形用户界面)应用程序,用于将人民币金额转换成大写,是一项常见的任务,尤其在财务系统或者银行应用中。这个功能有助于避免因数字输入错误引发的潜在问题,因为汉字的大写金额比...

    数字转金额的源代码(java)

    在IT行业中,编程是解决问题的关键,特别是在金融领域,准确地将数字转化为大写的金额格式是必不可少的。...通过阅读和学习这段代码,无论是新手还是老手,都能从中获得关于Java编程和金额转换的宝贵知识。

Global site tag (gtag.js) - Google Analytics