本程序的作用是将人民币的小写形式转换为大写,例如:调用upper("18.5"),将会返回字符串“壹拾捌圆伍角”package com.zzb.test0;
import junit.framework.Assert;
import org.junit.Test;
/**
* 测试人民币小写转大写
* @author zhengzhb
*/
public class UpperMoney {
public String upper(String money) throws Exception{
if(!money.matches("^[1-9]+[0-9]*$|^[1-9]+[0-9]*.[0-9]+$" )){
throw new Exception("钱数格式错误!");
}
String[] part= money.split("\\.");
StringBuffer integer = new StringBuffer();
for(int i=0;i<part[0].length();i++){
char perchar = part[0].charAt(i);
integer.append(this.upperNumber(perchar));
integer.append(this.upperNumber(part[0].length()-i-1));
}
StringBuffer decimal = new StringBuffer();
if(part.length>1 && !"00".equals(part[1])){
int length = part[1].length()>=2?2:part[1].length();
for(int i=0;i<length;i++){
char perchar = part[1].charAt(i);
decimal.append(this.upperNumber(perchar));
if(i==0)decimal.append('角');
if(i==1)decimal.append('分');
}
}
String result = integer.toString()+decimal.toString();
return this.dispose(result);
}
private char upperNumber(char number){
switch(number){
case '0': return '零';
case '1': return '壹';
case '2': return '贰';
case '3': return '叁';
case '4': return '肆';
case '5': return '伍';
case '6': return '陆';
case '7': return '柒';
case '8': return '捌';
case '9': return '玖';
}
return 0;
}
private char upperNumber(int index){
switch(index){
case 0: return '圆';
case 1: return '拾';
case 2: return '佰';
case 3: return '仟';
case 4: return '万';
case 5: return '拾';
case 6: return '佰';
case 7: return '仟';
case 8: return '亿';
case 9: return '拾';
case 10: return '佰';
case 11: return '仟';
}
return 0;
}
private String dispose(String result){
result = result.replaceAll("零仟零佰零拾|零仟零佰|零佰零拾|零仟|零佰|零拾", "零")
.replaceAll("零+", "零").replace("零亿", "亿");
result = result.matches("^.*亿零万[^零]仟.*$" )?result.replace("零万", "零")
:result.replace("零万", "万");
result = result.replace("亿万", "亿").replace("零圆", "圆").replace("零分", "")
.replaceAll("圆零角零分|圆零角$|圆$" , "圆整");
return result;
}
@Test
public void test(){
try {
Assert.assertEquals(upper("1"), "壹圆整");
Assert.assertEquals(upper("10"), "壹拾圆整");
Assert.assertEquals(upper("20.7"), "贰拾圆柒角");
Assert.assertEquals(upper("10.70"), "壹拾圆柒角");
Assert.assertEquals(upper("18.5"), "壹拾捌圆伍角");
Assert.assertEquals(upper("200.5"), "贰佰圆伍角");
Assert.assertEquals(upper("2000"), "贰仟圆整");
Assert.assertEquals(upper("50000"), "伍万圆整");
Assert.assertEquals(upper("500000"), "伍拾万圆整");
Assert.assertEquals(upper("5000000"), "伍佰万圆整");
Assert.assertEquals(upper("50000000"), "伍仟万圆整");
Assert.assertEquals(upper("500000000"), "伍亿圆整");
Assert.assertEquals(upper("5000000000"), "伍拾亿圆整");
Assert.assertEquals(upper("5000000001"), "伍拾亿零壹圆整");
Assert.assertEquals(upper("5000000021"), "伍拾亿零贰拾壹圆整");
Assert.assertEquals(upper("5000000421"), "伍拾亿零肆佰贰拾壹圆整");
Assert.assertEquals(upper("5000005421"), "伍拾亿零伍仟肆佰贰拾壹圆整");
Assert.assertEquals(upper("5000035421"), "伍拾亿零叁万伍仟肆佰贰拾壹圆整");
Assert.assertEquals(upper("5000635421"), "伍拾亿零陆拾叁万伍仟肆佰贰拾壹圆整");
Assert.assertEquals(upper("5004635421"), "伍拾亿零肆佰陆拾叁万伍仟肆佰贰拾壹圆整");
Assert.assertEquals(upper("5024635421"), "伍拾亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");
Assert.assertEquals(upper("5224635421"), "伍拾贰亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");
Assert.assertEquals(upper("15224635421"), "壹佰伍拾贰亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");
Assert.assertEquals(upper("215224635421"), "贰仟壹佰伍拾贰亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");
Assert.assertEquals(upper("500021"), "伍拾万零贰拾壹圆整");
Assert.assertEquals(upper("5000821"), "伍佰万零捌佰贰拾壹圆整");
Assert.assertEquals(upper("5050006501"), "伍拾亿伍仟万陆仟伍佰零壹圆整");
Assert.assertEquals(upper("550300001"), "伍亿伍仟零叁拾万零壹圆整");
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
以上就是C#中实现人民币小写转大写的基本方法和示例。在实际项目中,你可能需要根据业务需求进行更复杂的设计,比如处理负数、添加异常处理、优化性能等。同时,对于大型项目,建议将这类功能封装到独立的服务或库中...
### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...
这篇博客"PHP 人民币小写转换成大写"提供了一个实用的解决方案,通过源码实现这一功能。 首先,我们需要理解人民币金额的大写规则。在中国,人民币金额的大写包括壹、贰、叁、肆、伍、陆、柒、捌、玖、零这些汉字,...
小写转大写的转换规则主要涉及以下几点: 1. **数字与汉字的对应关系**:每个阿拉伯数字都有其对应的汉字表示。 - 0 对应 “零” - 1 对应 “壹” - 2 对应 “贰” - 3 对应 “叁” - 4 对应 “肆” - 5 对应...
### 小写人民币转大写ACCESS函数解析 #### 背景介绍 在日常的财务工作中,经常需要将数字格式的金额转换成汉字大写形式,尤其是在开具支票、填写电汇凭证或制作记账凭证时更为常见。这种转换不仅能够提高正式文件的...
MFC制作的人民币小写金额转化大写金额,方便出差回来时报账填写账单大写RMB使用,欢迎下载
在编程中,将人民币小写转换为大写,一般涉及以下步骤: 1. **整数部分的转换**:将整数部分的每一位数字对应到相应的汉字。例如,0对应零,1对应壹,以此类推至9对应玖。这个过程可以通过创建一个映射表来实现,将...
C语言实现人民币小写金额与大写金额的转换 C语言是一种广泛使用的编程语言,具有强大的功能和灵活性。本文中,我们将使用C语言实现人民币小写金额与大写金额的转换。 在中国,人民币的小写金额与大写金额的转换是...
在Excel中将人民币金额小写转成大写 在Excel中将人民币金额小写转成大写 在Excel中将人民币金额小写转成大写
在JavaScript编程中,有时我们需要将人民币的数字金额(小写)转换为中文的大写形式,以便于财务报表或发票的规范书写。这个过程涉及到字符映射、数字处理以及字符串操作等多个知识点。以下是对这个主题的详细说明:...
在C语言编程中,开发一个小程序来将人民币的小写金额转换为大写金额是一项常见的任务,尤其在财务软件或银行系统中。这个程序的核心在于理解人民币金额的表示规则,并将其与C语言的数据处理和字符串操作相结合。下面...
本文档主要讲解了使用JAVA程序将人民币小写转换为大写的实现方法。该程序使用了BigDecimal类型来处理金额,并使用String数组来存储中文数字和单位。 知识点1:BigDecimal类型在JAVA中的应用 在JAVA中,BigDecimal...
总之,“人民币金额小写转换大写工具 1.0 绿色版”是一个实用且便捷的工具,对于处理人民币金额转换工作提供了极大的便利。它的存在简化了财务人员的工作流程,减少了人为错误,提升了业务处理的效率和准确性。
本文将详细介绍"BAT批处理脚本-格式转换-人民币金额小写转大写.cmd.zip"这个压缩包中的知识点,以及如何利用批处理脚本来实现人民币金额的小写到大写的转换。 首先,我们要理解批处理脚本的基本概念。批处理脚本是...
人民币小写转大写人民币小写转大写人民币小写转大写
本篇文章将介绍在Excel中将人民币小写金额转换为大写金额的技巧。这种技巧主要应用于财税实务中,能够帮助用户快速将小写金额转换为大写金额。 1. 使用自定义格式类型 在Excel中,可以使用自定义格式类型中的“...
在Java编程中,将钱币小写金额转换为大写金额是一项常见的需求,特别是在财务系统或者电商平台上,为了符合规范和避免误解,金额通常会以大写形式展示。本知识点主要探讨如何利用Java实现这一功能。 首先,我们需要...
人民币小写金额转大写金额,不是简单的数字转换,而是在数字依次转换成大写文字后,再继续进行整理,将转换结果整理成符合大写金额书写要求的结果.