• 阿拉伯数字 转 汉字大写


    参考 算法的乐趣

    阿拉伯数字 转 汉字大写   如 123 > 壹佰贰拾叁

    思路:

    如:a = 123,1234,1200    

    按权位分为 {"","拾","佰","仟"},

    按节权位分{"","万","亿","万亿"}

    1.将 a 按4位分隔,循环每个分隔,通过位移确定权位,进行转换中文。

    然后确定每个分隔后的节权位。

    注意对0的转换:

    1.10000 不取零

    2.1001 取一个零

    3.01不取零

    如下:

     1 package algo;
     2 
     3 public class NumToCh {
     4     static String  [] chnChar = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
     5     //权位
     6     static String [] chnUnit = {"","拾","佰","仟"};
     7     //节权位
     8     static String [] chnUnitSec = {"","万","亿","万亿"};
     9     
    10     public static void main(String[] args) {
    11         String a = "11120";
    12         String b = "0011120";//001,1120
    13         String c = "111002";// 11,1002
    14         String d = "11102";
    15         System.out.println(numberTochn(a));
    16         System.out.println(numberTochn(b));
    17         System.out.println(numberTochn(c));
    18         System.out.println(numberTochn(d));
    19         
    20     }
    21     
    22     private static String numberTochn(String numScan){
    23         int num = Integer.parseInt(numScan);
    24         StringBuffer chn = new StringBuffer();
    25         int unitPos = 0;
    26         boolean zero = true;
    27         while(num>0){
    28             int section = num%10000;
    29             if(!zero){
    30                 chn.insert(0, chnChar[0]);
    31             }
    32             //将section转中文
    33             String ch = numberToChar(section);
    34             //加 节权位
    35             if(section!=0){
    36                 ch += (chnUnitSec[unitPos]);
    37             }
    38             chn.insert(0, ch);
    39             //千字节为0,需要在下一个 section补零
    40             if(section<1000&&section>0){
    41                 zero = false;
    42             }
    43             //节权位对应的下标
    44             unitPos++;
    45             //移位下一个
    46             num = num/10000;
    47         }
    48         
    49         return chn.toString();
    50     }
    51     //将数字转换为中文
    52     private static String numberToChar(int section) {
    53         StringBuffer chn = new StringBuffer();
    54         boolean zero = true;
    55         int unitPos = 0 ;
    56         while(section>0){
    57             int v = section%10;
    58             if(v==0){
    59                 //zero控制零(必须判断有数字后,才输入零(01),并且多个连续的0只取一个(0000))
    60                 if(!zero){
    61                     zero = true;
    62                     chn.insert(0, chnChar[v]);
    63                 }
    64             }else{
    65                 zero = false;
    66                 String s = chnChar[v] + //转字符
    67                         chnUnit[unitPos];//权位
    68                 chn.insert(0,s);
    69             }
    70             //移位下标
    71             unitPos++;
    72             //移位下个
    73             section = section/10;
    74         }
    75         return chn.toString();
    76         
    77     }
    78     
    79 
    80 }
  • 相关阅读:
    数组的push()、pop()、shift()和unshift()方法
    Javascript的函数柯里化
    开闭原则
    字符串相等的判断
    String类常用的方法
    阅读API文档
    String类和常量池
    String基础
    内部类的分类
    内部类的概念
  • 原文地址:https://www.cnblogs.com/GotoJava/p/7435239.html
Copyright © 2020-2023  润新知