阿拉伯数字大写转换

转载请注明出处,欢迎讨论!

public class GenChinese {
  private final static String[] STR_CHINESE_NUMBER={
    "零","壹","贰","叁","肆","伍","陆","柒","捌","玖"
  };
  private final static String[] STR_SHU_JI = {
    "亿","万",""
  };  //大数量级
  private final static String[] STR_SHU_JI_2={
      "千","佰","拾",""
  };//千内数量级

  public GenChinese() {
  }

  /**
   *
   * @param intNumber  需要转换的整数
   * @return  返回汉字大写数字
   */
  public String genChinese(int intNumber){
    StringBuffer rets = new StringBuffer(); //返回字符串
    int ret; //临时变量
    ret = intNumber;
    int i=1;  //存储数字长度
    while((ret=ret/10)!=0){
      i++;            //计算数字长度
    }

    //构建一维数组
    int[] intarrrayA=new int[i];
    ret = intNumber;
    int m = i;  //m临时变量
    for(m=m-1;m>=0;m--){
      intarrrayA[m]=ret%10;  //取余
      //System.out.println(intarrrayA[m]);
      ret = ret/10;
    }

    //构建二维数组
    int rows=1;  //二维数组的行数变量
    if(i%4==0){
      rows=i/4;
    }else{
      rows=i/4+1;
    }
    m = i-1; //存储数组下标临时变量
    int[][] intArrayB = new int[rows][4];
    for(int n=rows-1;n>=0;n--){
      for(int a=3;a>=0;a--){
        if(m>=0){
          intArrayB[n][a] = intarrrayA[m];
        }else{
          intArrayB[n][a] = 0;    //不足4列的前补零,形如数字44构建二维数组维{{0,0,4,4}}
        }
        m--;
      }
    }

    //打印intArrayB
    /**
    for(int a=0;a       for(int b=0;b<4;b++){
        if(b==3){
          System.out.println(intArrayB[a][b]);
        }else{
          System.out.print(intArrayB[a][b]);
        }
      }
    }
    */

    //打印汉字过程
    int iFlag = 0;  //第一行的前面0数字的处理标志
    int iZero = 0;
    for(int a=0;a       for (int b = 0; b < 4; b++) {
        if(a==0&&intArrayB[a][b]==0&&iFlag==0){
          ;
        }else{
          iFlag = 1; //
          if(a==0){  //第一行处理状况,整形不会超过3行
            if(iZero==0){         //没有出现零
              if(intArrayB[a][b]!=0){
                rets.append(STR_CHINESE_NUMBER[intArrayB[a][b]]);
                rets.append(STR_SHU_JI_2[b]); //加小数量级
              }else{
                iZero++;
              }
            }else{
              if(intArrayB[a][b]!=0){
                rets.append(STR_CHINESE_NUMBER[0]).append(STR_CHINESE_NUMBER[intArrayB[a][b]]);
                rets.append(STR_SHU_JI_2[b]); //加小数量级
                iZero = 0;
              }else{
                if(b==3){
                  rets.append(STR_CHINESE_NUMBER[0]);
                  iZero = 0;
                }else{
                  iZero++;
                }
              }
            }
          }else if(a>0){
            if (iZero == 0) {
              if (intArrayB[a][b] != 0) {
                rets.append(STR_CHINESE_NUMBER[intArrayB[a][b]]);
                rets.append(STR_SHU_JI_2[b]); //加小数量级
              }
              else {
                iZero++;
              }
            }
            else {
              if (intArrayB[a][b] != 0) {
                rets.append(STR_CHINESE_NUMBER[0]).append(STR_CHINESE_NUMBER[
                    intArrayB[a][b]]);
                rets.append(STR_SHU_JI_2[b]); //加小数量级
                iZero = 0;
              }
              else {
                if(b==3&&a!=rows-1){
                  rets.append(STR_CHINESE_NUMBER[0]);
                  iZero = 0;
                }else{
                  iZero++;
                }
              }
            }
          }
        }
      }
      if(rows==3)        //判断大数量级别读取
        rets.append(STR_SHU_JI[a]);
      else if(rows==2)
        rets.append(STR_SHU_JI[a+1]);
      else if(rows==1)
        rets.append("");
    }

    return rets.toString();
  }

  static void printArray(int[] arrayInt){
    for(int i=0;i       if(i==arrayInt.length-1)
        System.out.println(arrayInt[i]);
      else
        System.out.print(arrayInt[i]+",");
  }

   public static void main(String[] args){
    GenChinese g = new GenChinese();

    long m = System.currentTimeMillis();
    System.out.println(g.genChinese(1000050404));
    long n = System.currentTimeMillis();
    System.out.println("运行了"+(n-m));

   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是阿拉伯数字转换为中文大写数字的代码: ```python def num2cn(num): # 中文大写数字 cn_num = { '0': '零', '1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖' } # 中文数字单位 cn_unit = ['', '拾', '佰', '仟', '万', '亿'] # 将数字转换为字符串并反转 num_str = str(num)[::-1] # 记录是否出现过非零数字 has_value = False # 记录是否需要添加单位 need_unit = False # 记录上一个数字是否为零 prev_zero = False # 中文大写数字字符串 cn_str = '' # 遍历数字字符串 for i in range(len(num_str)): # 当前数字 n = num_str[i] # 当前单位 unit = cn_unit[i] # 如果当前数字为零 if n == '0': # 如果之前没有出现过非零数字,不需要将零添加到字符串中 if not has_value: continue # 如果之前出现过非零数字,并且上一个数字不是零,需要将零添加到字符串中 elif not prev_zero: cn_str += cn_num[n] prev_zero = True # 如果当前数字不为零 else: # 添加单位 if need_unit: cn_str += unit # 添加数字 cn_str += cn_num[n] # 标记出现过非零数字 has_value = True # 标记当前数字不是零 prev_zero = False # 标记需要添加单位 need_unit = True # 如果当前数字已经是最后一位,并且需要添加单位,添加“元”单位 if i == len(num_str) - 1 and need_unit: cn_str += '元' # 将字符串反转并返回 return cn_str[::-1] ``` 使用示例: ```python num = 123456789 cn_num = num2cn(num) print(cn_num) # 输出:壹亿贰仟叁佰肆拾伍万陆仟柒佰捌十九元 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值