- 浏览: 7352 次
- 性别:
- 来自: 上海
最新评论
关于中文大写,网上有很多代码可以下载使用,但是仔细看了,很多都不完美支持财务要求的中文大写规则,以前好像看到过中文大写类库,但是不记得了,于是只好自己写
财务规则:
零在元位和万位上时,这个零一般可写可不写。
阿拉伯小写金额数字中有“0”时,中文大写应按照汉语语言规律、金额数字构成和防止涂改的要求进行书写。举例如下:
(一) 阿拉伯数字中间有“0”时,中文大写金额中间可以只写一个“零”字。如¥1409.50,应写成人民币壹仟肆佰零玖元伍角。
(二) 阿拉伯数字中间连续有几个“0”,中文大写金额中间可以只写一个“零”字,如¥6007.14,应写成人民币陆仟零柒元壹角肆分。
(三) 阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”,万位、元位也是“0”,但仟位、角位不是“0”时,中文大写金额中可以只写一个零字,也可以不写“零”字,如¥1680.32,应写成人民币壹仟陆佰捌拾元零三角贰分,或者写成人民币壹仟陆佰捌拾元三角贰分;又如¥107000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万柒仟元伍角叁分。
(四) 阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后面应写“零”字。如¥16409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾元零肆分。
根据《中华人民共和国票据法》的相关规定:
填写票据和结算凭证,必须做到标准化、规范化,要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。
1、中文大写金额数字如零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿等,应用正楷或行书填写,不得自造简化字。如果金额数字书写中使用繁体字,也应受理(针对银行方)。
2、中文大写金额数字到“元”为止的,在“元”之后,应写“整”(或“正”)字,在“角”之后可以不写“整”(或“正”)字。大写金额数字有“分”的,“分”后面不写“整”(或“正”)字。
3、中文大写在写一般票据和银行支票是不一样的。一般票据的写法上面的天外非仙已经写得很清楚了,银行支票得写法就得把零全写上,不管0在什么位置,要写成零元零角零分。
财务规则:
零在元位和万位上时,这个零一般可写可不写。
阿拉伯小写金额数字中有“0”时,中文大写应按照汉语语言规律、金额数字构成和防止涂改的要求进行书写。举例如下:
(一) 阿拉伯数字中间有“0”时,中文大写金额中间可以只写一个“零”字。如¥1409.50,应写成人民币壹仟肆佰零玖元伍角。
(二) 阿拉伯数字中间连续有几个“0”,中文大写金额中间可以只写一个“零”字,如¥6007.14,应写成人民币陆仟零柒元壹角肆分。
(三) 阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”,万位、元位也是“0”,但仟位、角位不是“0”时,中文大写金额中可以只写一个零字,也可以不写“零”字,如¥1680.32,应写成人民币壹仟陆佰捌拾元零三角贰分,或者写成人民币壹仟陆佰捌拾元三角贰分;又如¥107000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万柒仟元伍角叁分。
(四) 阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后面应写“零”字。如¥16409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾元零肆分。
根据《中华人民共和国票据法》的相关规定:
填写票据和结算凭证,必须做到标准化、规范化,要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。
1、中文大写金额数字如零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿等,应用正楷或行书填写,不得自造简化字。如果金额数字书写中使用繁体字,也应受理(针对银行方)。
2、中文大写金额数字到“元”为止的,在“元”之后,应写“整”(或“正”)字,在“角”之后可以不写“整”(或“正”)字。大写金额数字有“分”的,“分”后面不写“整”(或“正”)字。
3、中文大写在写一般票据和银行支票是不一样的。一般票据的写法上面的天外非仙已经写得很清楚了,银行支票得写法就得把零全写上,不管0在什么位置,要写成零元零角零分。
import java.math.BigDecimal; import org.apache.commons.lang.StringUtils; /** * * desc: 数字金额转换成中文大写财务金额工具类 * * @author <a href="mailto:yourmail">Hegege</a> * @version CVS $Revision: 1.1 $ $Date: 2005/12/05 08:42:21 $ */ public class ChineseMoneyUtils { private String number[] = { "", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; private String unit[] = { "", "拾", "佰", "仟" }; private String small[] = { "角", "分" }; public static void main(String[] args) { String d = "9078006005.04"; Double x = Double.valueOf("9078006005.4"); BigDecimal xx = BigDecimal.valueOf(x.doubleValue()); String t = xx.toEngineeringString(); // String d = "325.04"; String y = getByNumber(Double.valueOf(0)); String m = getByString(".02"); String str = getByD(d); System.out.println(str); // CommonDao commonDao = new CommonDao(); // try { // commonDao.getHibernateSession().connection(); // commonDao.getHibernateSession().createSQLQuery("sql"); // commonDao.getHibernateSession().close(); // // } catch (HibernateException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (WAFException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } finally{ // try { // commonDao.getHibernateSession().close(); // } catch (HibernateException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (WAFException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } } /** * 根据数字类型返回中文大写的数字 * * @param number * @return */ public static String getByNumber(Number number) { if (number != null) { BigDecimal xx = BigDecimal.valueOf(number.doubleValue()); String t = xx.toEngineeringString(); if (StringUtils.isNotEmpty(t)) { if (t.indexOf(".") > 0 && t.indexOf(".") == t.length() - 2) { t += "0"; } else if (t.indexOf(".") > 0 && t.indexOf(".") < t.length() - 2) { t = t.substring(0, t.indexOf(".") + 3); } else { t += ".00"; }// 还漏掉t.indexOf(".")>0&&t.indexOf(".")==t.length()-1的判断,但是形参是Number类型,这种情况不会发生 return getByD(t); } else { return null; } } else { return null; } } /** * 根据字符类型返回中文大写的数字 * * @param s * @return */ public static String getByString(String s) { if (StringUtils.isNotEmpty(s)) { try { BigDecimal xx = BigDecimal.valueOf(Double.valueOf(s) .doubleValue()); String t = xx.toEngineeringString(); if (StringUtils.isNotEmpty(t)) { if (t.indexOf(".") > 0 && t.indexOf(".") == t.length() - 2) { t += "0"; } else if (t.indexOf(".") > 0 && t.indexOf(".") < t.length() - 2) { t = t.substring(0, t.indexOf(".") + 3); } else { t += ".00"; }// 还漏掉t.indexOf(".")>0&&t.indexOf(".")==t.length()-1的判断,但是形参是Number类型,这种情况不会发生 return getByD(t); } else { return null; } } catch (NumberFormatException e) { e.printStackTrace(); System.out.println("********字符串不合法*******"); return null; } } else { return null; } } /** * 形参必须是格式化的字符串xxxxxxxx.xx * * @param d * @return("":数字是0,"0":数字太大) * * 零在元位和万位上时,这个零一般可写可不写。 * 阿拉伯小写金额数字中有“0”时,中文大写应按照汉语语言规律 * 、金额数字构成和防止涂改的要求进行书写。举例如下: * * (一) * 阿拉伯数字中间有“0”时,中文大写金额中间可以只写一个“零”字。如¥1,409.50 * ,应写成人民币壹仟肆佰零玖元伍角。 * * (二) * 阿拉伯数字中间连续有几个“0”,中文大写金额中间可以只写一个“零”字,如¥6,007.14 * ,应写成人民币陆仟零柒元壹角肆分。 * * (三) * 阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”,万位、元位也是“0” * ,但仟位、角位不是 * “0”时,中文大写金额中可以只写一个零字,也可以不写“零”字,如¥1,680.32 * ,应写成人民币壹仟陆佰捌拾元零三角贰分 * ,或者写成人民币壹仟陆佰捌拾元三角贰分;又如¥107,000.53 * ,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万柒仟元伍角叁分。 * * (四) * 阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后面应写“零”字 * 。如¥16,409.02 * ,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾元零肆分。 * * 根据《中华人民共和国票据法》的相关规定: * 填写票据和结算凭证,必须做到标准化、规范化,要素齐全、 * 数字正确、字迹清晰、不错漏、不潦草,防止涂改。 * 1、中文大写金额数字如零、壹、贰、叁、肆、伍、陆 * 、柒、捌、玖、拾、佰、仟、万、亿等,应用正楷或行书填写 * ,不得自造简化字。如果金额数字书写中使用繁体字,也应受理(针对银行方)。 * 2、中文大写金额数字到 * “元”为止的,在“元”之后,应写“整”(或“正”)字,在“角”之后可以不写 * “整”(或“正”)字。大写金额数字有“分”的,“分”后面不写“整”(或“正”)字。 * 3、中文大写在写一般票据和银行支票是不一样的 * 。一般票据的写法上面的天外非仙已经写得很清楚了,银行支票得写法就得把零全写上 * ,不管0在什么位置,要写成零元零角零分。 */ private static String getByD(String d) { Double dd = Double.valueOf(d); if (dd < 10000000000.00d) { StringBuffer rs = new StringBuffer(""); BigDecimal bigDecimal = new BigDecimal(d); String v = d; boolean substringflag = false; int sp = v.indexOf("."); String v1 = v.substring(0, sp); String v2 = v.substring(sp + 1, v.length()); if ((bigDecimal .divideToIntegralValue(new BigDecimal(1000000000.00d))) .intValue() > 0) { // 十亿 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(1000000000.00d))) .intValue())); rs.append("拾"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("零"); } if ((bigDecimal .divideToIntegralValue(new BigDecimal(100000000.00d))) .intValue() > 0) { // 亿 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(100000000.00d))) .intValue())); rs.append("億"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("億"); } if ((bigDecimal.divideToIntegralValue(new BigDecimal(10000000.00d))) .intValue() > 0) { // 千万 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(10000000.00d))) .intValue())); rs.append("仟"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("零"); } if ((bigDecimal.divideToIntegralValue(new BigDecimal(1000000.00d))) .intValue() > 0) { // 百万 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(1000000.00d))) .intValue())); rs.append("佰"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("零"); } if ((bigDecimal.divideToIntegralValue(new BigDecimal(100000.00d))) .intValue() > 0) { // 十万 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(100000.00d))) .intValue())); rs.append("拾"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("零"); } if ((bigDecimal.divideToIntegralValue(new BigDecimal(10000.00d))) .intValue() > 0) { // 万 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(10000.00d))) .intValue())); rs.append("萬"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("萬"); } if ((bigDecimal.divideToIntegralValue(new BigDecimal(1000.00d))) .intValue() > 0) { // 千 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(1000.00d))) .intValue())); rs.append("仟"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("零"); } if ((bigDecimal.divideToIntegralValue(new BigDecimal(100.00d))) .intValue() > 0) { // 百 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(100.00d))) .intValue())); rs.append("佰"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("零"); } if ((bigDecimal.divideToIntegralValue(new BigDecimal(10.00d))) .intValue() > 0) { // 十 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(10.00d))) .intValue())); rs.append("拾"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("零"); } if ((bigDecimal.divideToIntegralValue(new BigDecimal(1.00d))) .intValue() > 0) { // 元 rs.append(getNum((bigDecimal .divideToIntegralValue(new BigDecimal(1.00d))) .intValue())); rs.append("圆"); v = v.substring(1); sp = v.indexOf("."); v1 = v.substring(0, sp); bigDecimal = new BigDecimal(v); substringflag = true; } else { if (substringflag) { v = v.substring(1); } rs.append("圆"); } if ("00".equals(v2)) { rs.append("整"); } else { if (!"0".equals(v2.substring(0, 1))) { Integer k = Integer.valueOf(v2.substring(0, 1)); rs.append(getNum(k.intValue())); rs.append("角"); } else { rs.append("零"); } if (!"0".equals(v2.substring(1, 2))) { Integer k = Integer.valueOf(v2.substring(1, 2)); rs.append(getNum(k.intValue())); rs.append("分"); } else { } } String rss = rs.toString(); rss = rss.replaceAll("零零零", "零"); rss = rss.replaceAll("零零", "零"); rss = rss.replaceAll("零億", "億"); rss = rss.replaceAll("零萬", "萬"); rss = rss.replaceAll("零圆", "圆"); if (rss.startsWith("零")) { rss = rss.substring(1); } if (rss.startsWith("億")) { rss = rss.substring(1); } if (rss.startsWith("零")) { rss = rss.substring(1); } if (rss.startsWith("萬")) { rss = rss.substring(1); } if (rss.startsWith("零")) { rss = rss.substring(1); } if (rss.startsWith("圆")) { rss = rss.substring(1); } if (rss.startsWith("零")) { rss = rss.substring(1); } if (rss.startsWith("拾")) { rss = rss.substring(1); } if (rss.startsWith("零")) { rss = rss.substring(1); } if (rss.startsWith("佰")) { rss = rss.substring(1); } if (rss.startsWith("零")) { rss = rss.substring(1); } if (rss.startsWith("仟")) { rss = rss.substring(1); } if ("整".equals(rss)) rss = ""; return rss; } else { return "0"; } } private static String getNum(int intValue) { if (intValue == 1) { return "壹"; } else if (intValue == 2) { return "贰"; } else if (intValue == 3) { return "叁"; } else if (intValue == 4) { return "肆"; } else if (intValue == 5) { return "伍"; } else if (intValue == 6) { return "陆"; } else if (intValue == 7) { return "柒"; } else if (intValue == 8) { return "捌"; } else if (intValue == 9) { return "玖"; } else { return "零"; } } }
相关推荐
在实际项目中,我们可以将这些转换功能封装到单独的工具类中,方便复用。同时,考虑到性能和可维护性,可以考虑使用预编译的表达式或者查找表来优化转换过程。 综上所述,Android中实现数字转中文和金额转大写主要...
在IT行业中,尤其是在财务软件开发或者电子商务系统的支付模块,将数字金额转换成中文大写是一项重要的功能。这有助于防止因为数字格式错误导致的财务纠纷,同时满足了中国传统的会计规范,确保账目清晰准确。本篇...
在IT行业中,人民币大写金额转换是一个常见的需求,特别是在财务软件、银行系统或者会计系统中。这个DLL库的出现,为开发者提供了一个便捷的工具,能够自动将阿拉伯数字形式的人民币金额转换为汉字大写,同时也支持...
本项目提供了一个C++实现的解决方案,将数字转化为符合中国传统的中文大写金额格式。 首先,我们要理解中文金额大写的规则。在中国,数字的中文大写形式有特定的对应关系: 1. 零 - 零 2. 一 - 壹 3. 二 - 贰 4. ...
【大写金额转换器】是一种实用工具,专为金融、会计和商业领域的用户设计,能够将数字金额转换成中文大写形式。在处理财务文件、合同或者发票时,按照中国的传统,金额通常需要以中文大写来表示,以增强文档的清晰度...
在实际项目中,这样的功能可能会被封装在一个独立的类或者工具包中,以供其他模块调用,提高代码的复用性。 总的来说,将阿拉伯数字转换为金额的汉字大写是Java在财务领域中的一项基础应用,它体现了编程语言处理...
在压缩包中,`说明.txt`文件可能包含了详细的使用说明和代码实现逻辑,而`AmountTransfer`可能是项目中的主要源代码文件,包含实现金额转换功能的类或方法。通过阅读`AmountTransfer`源代码,我们可以更深入地了解...
4. **处理特殊字符**:在中文大写金额中,某些数字组合有特定的表示,比如10到19、20、50、100等,需要特殊处理。 5. **组合结果**:将转换后的中文字符按照正确的顺序组合起来,同时处理千位、万位、亿位等的分隔...
在实际项目中,为了提高代码的可维护性和可扩展性,可以将映射表和解析逻辑封装成更独立的组件,例如使用枚举类型表示中文数字和单位,或者创建一个解析器类来处理不同的部分。 总的来说,实现中文大写转小写数字的...
在这个类中,属性可能包括一些预定义的转换规则,如零到九的数字对应的汉字,以及“元”、“角”、“分”等货币单位的汉字表示。方法可能包含一个主要的转换函数,该函数接受数字金额作为输入,然后按照特定的规则...
同时,还包含了将数字转换为中文大写的工具,这对于财务或会计系统尤其有用,因为在中国,金额通常需要以中文大写形式表示以避免混淆和错误。 首先,让我们详细了解一下SQL SERVER数据库访问类。这个类库(DBClass....
整数部分可以通过循环和条件判断,将每一位数字映射到对应的汉字大写字符。对于小数部分,可以设置相应的规则,如保留几位小数,并将其转换为百分比形式。在某些数据库系统中,如Oracle,可能有内置的函数可以直接...
人民币小写转大写的功能,其核心在于将数字字符串(如"123456.78")转换为对应的中文大写金额(如"壹拾贰万叁仟肆佰伍拾陆元柒角捌分")。实现这个功能的关键步骤包括: 1. **金额分割**:将金额分为整数部分和小数...
在中文环境中,人民币的金额通常使用大写表示,以便于财务报表的规范性和防止篡改。本篇将介绍如何使用Java编程语言将人民币金额转换成大写,并且通过自定义标签库(Tag Library)在网页上显示。首先,我们来看`...
在财务领域,为了确保金额的准确无误,通常需要将数字转化为中文大写形式,以便在会计报表和合同中使用。本篇文章主要探讨的是如何使用Java实现数字到中文金额大写的转换。 首先,`Trans2RMB.java`是这个功能的核心...
重铸优化版(dll类库)”是一个专注于阿拉伯数字到中文大写转换的工具,适用于需要此功能的C#项目。它支持大范围的整数和小数转换,遵循传统的中国计数规则,通过DLL文件提供服务,方便开发者集成到他们的应用程序中。...
其次,金额大写转换在财务软件和银行系统中非常常见,它涉及到将阿拉伯数字转换为中文大写数字,以避免在处理大量金钱时的误解。在Java中,可以编写函数或者使用现有的库来实现这个功能。基本思路是定义一个映射表,...
根据给定的文件信息,我们将探讨如何在Java中实现将输入的金额数字转换为大写的中文表示形式。这种转换在财务、银行系统等场景中非常常见,有助于提高数据的可读性和规范性。 ### Java传入金额(数字)转换成大写的...
在Java中,可以编写一个辅助方法,将数字转换为中文大写的表示,例如“壹”、“贰”等。这个过程可能涉及到字符串处理和数字比较,可以使用switch语句或者映射表来实现。 在开发ATM模拟程序时,我们还需要考虑以下...
这个工具类中的`toChineseCapital`方法可以接收一个小写金额字符串,返回转换后的人民币大写表示。在实际项目中,可能还需要对输入进行校验,确保其格式正确,例如检查是否包含非法字符,金额是否超出合理范围等。 ...