黑马程序员技术交流社区

标题: 人民币转换大写 [打印本页]

作者: hou604720966    时间: 2013-5-31 23:55
标题: 人民币转换大写
  1. /**
  2.          * 功能描述:人民币转成大写,支持到分
  3.          *
  4.          * @param str
  5.          *            数字字符串
  6.          * @return String 人民币转换成大写后的字符串
  7.          */
  8.         public static String hangeToBig(String str) {
  9.                 double value;
  10.                 try {
  11.                         value = Double.parseDouble(str.trim());//将字符串转换为double类型
  12.                 } catch (Exception e) {
  13.                         System.err.println("输入的人民币非法");
  14.                         return null;
  15.                 }
  16.                 char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
  17.                 char[] vunit = { '万', '亿' }; // 段名表示
  18.                 char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
  19.                 long midVal = (long) (value * 100); // 转化成整形
  20.                 String valStr = String.valueOf(midVal); // 转化成字符串

  21.                 String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
  22.                 String rail = valStr.substring(valStr.length() - 2); // 取小数部分

  23.                 String prefix = ""; // 整数部分转化的结果
  24.                 String suffix = ""; // 小数部分转化的结果
  25.                 // 处理小数点后面的数
  26.                 if (rail.equals("00")) { // 如果小数部分为0
  27.                         suffix = "整";
  28.                 } else {
  29.                         suffix = digit[rail.charAt(0) - '0'] + "角"//通过ASCII码获取相应的值'0'的ASCII码为48
  30.                         + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
  31.                 }
  32.                 // 处理小数点前面的数
  33.                 char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
  34.                 char zero = '0'; // 标志'0'表示出现过0
  35.                 byte zeroSerNum = 0; // 连续出现0的次数
  36.                 for (int i = 0; i < chDig.length; i++) { // 循环处理每个数字
  37.                         int idx = (chDig.length - i - 1) % 4; // 取段内位置     '拾', '佰', '仟'
  38.                         int vidx = (chDig.length - i - 1) / 4; // 取段位置       '万', '亿'
  39.                         if (chDig[i] == '0') { // 如果当前字符是0
  40.                                 zeroSerNum++; // 连续0次数递增
  41.                                 if (zero == '0') { // 标志
  42.                                         zero = digit[0];
  43.                                 }
  44.                                 if (idx == 0 && vidx > 0 && zeroSerNum < 4) {
  45.                                         prefix += vunit[vidx - 1];
  46.                                         zero = '0';
  47.                                 }
  48.                                 continue;
  49.                         }
  50.                         zeroSerNum = 0; // 连续0次数清零
  51.                         if (zero != '0') { // 如果标志不为0,则加上,例如万,亿什么的
  52.                                 prefix += zero;
  53.                                 zero = '0';
  54.                         }
  55.                         prefix += digit[chDig[i] - '0']; // 转化该数字表示
  56.                         if (idx > 0)
  57.                                 prefix += hunit[idx - 1];
  58.                         if (idx == 0 && vidx > 0) {
  59.                                 prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
  60.                         }
  61.                 }
  62.                
  63.                 if (prefix.length() > 0)
  64.                         prefix += '圆'; // 如果整数部分存在,则有圆的字样
  65.                 return prefix + suffix; // 返回正确表示
  66.         }
复制代码
人民币转换大写程序,欢迎各位指导
作者: 吴松    时间: 2013-6-3 20:11
怎么无法运行呀?
作者: hou604720966    时间: 2013-6-4 20:05
吴松 发表于 2013-6-3 20:11
怎么无法运行呀?

这个只是一个转换方法,运行得自己写main方法调用了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2