public class ConverChMoney {
private static final String[] CH_NUMBER = {"零","壹","贰","叁","四","五","六","七","八","镹"};//数组下标即为对应的大写数字
private static final String[] LEVEL1 = {"","十","佰","仟"};
private static final String[] LEVEL2 = {"","万","亿"};
private static final String[] UNITS = {"元", "角", "分", "整"};
private static final String REGEX = "^(0|[1-9]\\d{0,11})(\\.(\\d\\d))?$";//金额正则表达式格式:123或123.00
/**将数字金额:123456789转换为大写形式如:壹亿贰千叁百四十五万六千七百八十九元
* 金额格式:123或123.00
* 将数字金额按4位长度截取,分三级(千、万、亿),最多支持到亿
* 缺少金额格式正确性校验
* @param args
*/
public static void main(String[] args) {
long startTime=System.currentTimeMillis(); //获取开始时间
//String money = "123456789";//壹亿贰千叁百四十五万六千七百八十九元
String numMoney = "123456789.30";
System.out.println("数字金额:" + numMoney);
if(!numMoney.matches(REGEX)){
System.err.println("输入金额错误!");
System.exit(0);
}
String integerNum = "";//整数部分
String fractionNum = "";//小数部分
String chMoney = "";
if(numMoney.indexOf(".") == -1){
if(!integerNum.equals("0")){
chMoney += converInteger(numMoney);//转换整数部分
}
}else{
//有小数部分
integerNum = numMoney.substring(0, numMoney.indexOf("."));
fractionNum = numMoney.substring(numMoney.indexOf(".")+1);
chMoney += converInteger(integerNum);//转换整数部分
if (fractionNum.equals("00")) {
chMoney += UNITS[3]; // 添加“整”
}else if(fractionNum.startsWith("0") && integerNum.equals("0")){
// 如果整数部分为0,则去掉分前面的“零”
chMoney += convertFraction(fractionNum).substring(1);
}else{
chMoney += convertFraction(fractionNum);
}
integerNum = converInteger(integerNum);////转换整数部分
}
System.out.println("转换之后:" + chMoney);
long endTime=System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
}
/**
* 转换金额小数部分
* @param fractionNum
* @return
*/
public static String convertFraction(String fractionNum){
char jiao = fractionNum.charAt(0); // 角
char fen = fractionNum.charAt(1); // 分
return (CH_NUMBER[jiao - '0'] + (jiao > '0' ? UNITS[1] : "")) + (fen > '0' ? CH_NUMBER[fen - '0'] + UNITS[2] : "");
}
/**
* 转换金额整数部分
* @param integerNum
* @return
*/
public static String converInteger(String integerNum){
int numLen = integerNum.length();
int remainder = numLen % 4;//余数
int divNum = numLen / 4;//取整
System.out.println("remainder:"+remainder+" divNum:"+divNum);
StringBuilder chMoney = new StringBuilder("");//最终输出结果
if(numLen <= 4){
chMoney.append(convertNumRange(integerNum));
}else{
String range;//分割的数字段
int startIndex = 0;
int i;
for(i = 0 ; i < divNum ; i++){
//从右向左按4位长度依次截取
startIndex = (numLen - 4)-(i*4);
range = integerNum.substring(startIndex , numLen - (i*4));
chMoney.insert(0, convertNumRange(range) + LEVEL2[i]);//加上金额级别("万","亿")
}
if(remainder != 0){
range = integerNum.substring( 0, startIndex);
chMoney.insert(0, convertNumRange(range) + LEVEL2[i]);//加上金额级别("万","亿")
}
}
return chMoney.toString()+UNITS[0];
}
/**
* 转换小于、等于4( <=4) 的整数部分数字
* @param number
* @return
*/
public static String convertNumRange(String number){
StringBuilder chineseMoney = new StringBuilder("");
char numChar;
int indexFromRight = 0;//从右边起开始的索引下标,下标为0表示个位数,1表示10位,2表示百位...
int maxNumIndex = number.length() - 1;//数字最大下标(下表从0算起,所以为长度减1)
for(int i = maxNumIndex ; i >= 0 ; i--){
numChar = number.charAt(i);//将数字从右向左逐一取出
if(numChar == '0'){
// 当 numChar 是 0 且不为个位数且 numChar 的右边一位不是0时,插入“零” (避免出现“零零”)
if(i < maxNumIndex && number.charAt(i + 1) != '0'){
chineseMoney.append(CH_NUMBER[0]);
}
}else{
chineseMoney.append(LEVEL1[indexFromRight]);//插入"十","佰","仟"
chineseMoney.append(CH_NUMBER[numChar - '0']);//插入大写数字
}
indexFromRight++;//下标加1
}
return chineseMoney.reverse().toString();
}
}
分享到:
相关推荐
使用excel vba 实现的数字金额转换大写功能,可进行多项选择进行数字金额转换大写,操作简便......
这个"ios-数字金额转大写金额.zip"压缩包可能包含一个示例项目,名为"Demo",用于演示如何实现这个功能。在这个场景中,用户输入数字金额后,系统会自动将其转换为大写的汉字表示,比如"壹仟贰佰叁拾肆元伍角陆分"。...
直接调用就行啦,数字金额转大写中文金额,完全不用改动的
"活字格-数字金额转大写"是一个与财务软件或工具相关的项目,它涉及到将数字形式的金额转换成中文大写的表示方式,这是中国金融和会计领域中常见的做法,以确保金额表述清晰且不易篡改。在财务报表、发票和合同等...
本文将深入探讨如何在Android环境中实现这一功能,包括数字转中文以及数字金额转大写,并且会涉及到口语化的转换。 首先,数字转中文主要是将阿拉伯数字(如1、2、3等)转换成中文数字(如一、二、三等)。在Java或...
将数字金额转换为大写汉字的java工具类,方便财务相关开发转换金额。
/* * 整数部分最多13位 * 调用方法: * 1.新建类 * 2.直接调用getRMB(String num)函数 * 3.返回大写金额 * */
在财务文档或正式报告中,将数字金额转换成大写格式是一种常见的规范要求,尤其在中国。FastReport提供了一种方法,通过编写自定义函数来实现这一转换。本例中的代码展示了一个具体的实现过程,用于将货币类型的数值...
excel vba 金额转换大写 加载宏 使用excel vba 实现的数字金额转换大写功能,可进行多项选择进行数字金额转换大写. 注意:将宏安全级别设置为中或低
输入字符,通过正则验证是否为金额不超过万亿精确到小数点后两位,然后将数字转换为大写 包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个...
水晶报表数字金额转中文大写,用于水晶报表中将数字金额转换为中文大写的金额
sqlserver数字转金额大写,输入数字返回汉字大写
通过js代码将小写金额转换成大写金额,将大写金额转换成数字
在IT领域,尤其是在财务软件和会计系统中,数字金额转人民币大写金额是一个常见的功能需求。这个过程主要是为了确保财务记录的准确性,因为大写汉字在金融交易中使用,可以防止数字被篡改,增加了财务凭证的安全性。...
在Oracle数据库环境中,有时我们需要将数字金额转换成汉字大写形式,这在财务报表或理财程序中尤为常见,因为汉字大写是财务领域的一种标准表示方式,可以避免因数字混淆而引发的错误。本篇文章将深入探讨如何在...
小写金额转大写金额源码 winform
将数字金额转换为中文大写金额将数字金额转换为中文大写金额将数字金额转换为中文大写金额
在MySQL数据库中,有时我们需要将数字金额转换成人民币的大写形式,这在财务报表或会计系统中非常常见。为了实现这一需求,我们可以自定义一个函数或者利用现有的字符串处理函数。以下是一个关于如何在MySQL中实现这...
create or replace function sf_get_money(p_num in number default null) 此函数处理数字小写金额转换为大写金额
FastReport 4 小写金额转中文大写金额,C#代码脚本 例子中代码放入Table中TableCell的AfterData事件中