您的位置:首页 > 编程语言 > Java开发

将数字字符串人民币转化成大写字符串人民币

2005-03-08 12:52 253 查看
/*
 * 创建日期 2005-3-8
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
package com.test;

/**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class TestRMB {
      /**
       * 测试numberConvert方法
       * @param args String[]
       */
      public static void main(String[] args) {
       //这是能转换的最大的数字
        String rmb = "90909.99";
        System.out.println(numberConvert(rmb));
      }

      /**
       * 将字符串数字转化为中文。
       * @param in 数字
       * @return 中文大写
       */
      public static String numberConvert(String in) {
        StringBuffer out = new StringBuffer();
        String chn[] = {
            "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        String end[] = {
            "", "拾", "佰", "仟", };
        String mid[] = {
            "", "万", "亿", "兆", };

        double ind = Double.parseDouble(in);
        long ind_left = (long) ind;
        long[] inte = new long[13]; //存放整数位
        int[] floa = new int[4]; //存放小数位

        /*将整数部分放入inte[]*/
        for (int i = 12; i >= 0; i--) {
          inte[i] = (long) (ind_left / (long) (Math.pow(10, i)));
          ind_left %= (long) (Math.pow(10, i));
        }
        /*象小数部分放入floa[]*/
        int index = in.indexOf('.');
        if (index != -1) {
          String str = in.substring(index + 1);
          for (int i = 0; i < str.length(); i++) {
            floa[i] = Integer.parseInt(str.substring(i, i + 1));
          }
        }
        /**如果整数位不是0,处理整数位 例子:111.1234**/
        if ( (int) ind != 0) {
          int i = 12;
          while (inte[i] == 0) { file://查找首位
            i--;
          }
          /*输出到 out */
          for (int j = i / 4; j >= 0; j--) {
            if (j == 3) { //如果 数字13位,单独处理 1兆
              out.append(chn[ (int) (inte[12])]).append(mid[3]);
              j--;
            }
            for (int k = 3; k >= 0; k--) {
              int num = 4 * j + k;
              if (inte[num] != 0) { //再不是0的位上一次添加 十百千
                out.append(chn[ (int) (inte[num])]).append(end[k]);
              }
              else {
                if (k == 0 || k == 0 && k == 1 || k == 0 && k == 1 && k == 2 ||
                    k == 0 && k == 1 && k == 2 && k == 3) {} //如果是 万亿位 的最后几位全是0 则也不输出
                else {
                  if (inte[num - 1] == 0) {} //根据后面以为是不是0判断加不加0 例子: 1003
                  else {
                    out.append(chn[0]);
                  }
                }
              }
            }
            if (! (inte[j * 4 + 0] == 0 && inte[j * 4 + 1] == 0 &&
                   inte[j * 4 + 2] == 0 && inte[j * 4 + 3] == 0)) { //如果有一段全是0 则也不输出位 例子:1000 0000 0003 不会出现 一千亿 万 零三
              out.append(mid[j]);
            }
          }
          if (out.charAt(0) == '零') { //因为最后一位没有下一位,所以是0则删去
            out.deleteCharAt(0);
          } //例子 30
        }
        /**如果整数位是0,处理整数位 ,直接加0 例子:0.1234**/
        else {
          out.append('零');
        }

        /*处理小数部分*/
        /*如果存在小数位*/
        if (index != -1) {
          out.append('点'); //处理小数位
          for (int m = 0; m <= 3; m++) {
            out.append(chn[floa[m]]);
          }
          int zero = out.length() - 1;
          while (out.charAt(zero) == '零') { //最后几位如果是0,则删除
            out.deleteCharAt(zero);
            zero--;
          }
        }
        return out.toString();
      }
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string java class file 测试