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 "零"; } } }
0票
开心
0票
板砖
0票
感动
0票
有用
0票
疑问
0票
难过
0票
无聊
0票
震惊
顶
踩