zoukankan      html  css  js  c++  java
  • 中国的数字成英文表示

    public class NumberToWords {
    
      private final String[] tensNames = {
        "",
        " ten",
        " twenty",
        " thirty",
        " forty",
        " fifty",
        " sixty",
        " seventy",
        " eighty",
        " ninety"
      };
    
      private final String[] numNames = {
        "",
        " one",
        " two",
        " three",
        " four",
        " five",
        " six",
        " seven",
        " eight",
        " nine",
        " ten",
        " eleven",
        " twelve",
        " thirteen",
        " fourteen",
        " fifteen",
        " sixteen",
        " seventeen",
        " eighteen",  
        " nineteen"
      };
    
      private String convertLessThanOneThousand(int number) {
        String soFar;
    
        if (number % 100 < 20){
          soFar = numNames[number % 100];
          number /= 100;
        }else {
          soFar = numNames[number % 10];
          number /= 10;
    
          if(soFar.equals("")){
        	  soFar = tensNames[number % 10] + soFar;
          }else{
        	  soFar = tensNames[number % 10] + " and " + soFar;
          }
          number /= 10;
        }
        if (number == 0){
        	return soFar;
        }
        return numNames[number] + " hundred" + soFar;
      }
    
    
      public String convert(long number) {
        // 0 to 999 999 999 999
        if (number == 0) { return "zero"; }
    
        String snumber = Long.toString(number);
    
        // pad with "0"
        String mask = "000000000000";
        DecimalFormat df = new DecimalFormat(mask);
        snumber = df.format(number);
    
        // XXXnnnnnnnnn 
        int billions = Integer.parseInt(snumber.substring(0,3));
        // nnnXXXnnnnnn
        int millions  = Integer.parseInt(snumber.substring(3,6)); 
        // nnnnnnXXXnnn
        int hundredThousands = Integer.parseInt(snumber.substring(6,9)); 
        // nnnnnnnnnXXX
        int thousands = Integer.parseInt(snumber.substring(9,12));    
    
        String tradBillions;
        switch (billions) {
        case 0:
          tradBillions = "";
          break;
        case 1 :
          tradBillions = convertLessThanOneThousand(billions) 
          + " billion ";
          break;
        default :
          tradBillions = convertLessThanOneThousand(billions) 
          + " billion ";
        }
        String result =  tradBillions;
    
        String tradMillions;
        switch (millions) {
        case 0:
          tradMillions = "";
          break;
        case 1 :
          tradMillions = convertLessThanOneThousand(millions) 
          + " million ";
          break;
        default :
          tradMillions = convertLessThanOneThousand(millions) 
          + " million ";
        }
        result =  result + tradMillions;
    
        String tradHundredThousands;
        switch (hundredThousands) {
        case 0:
          tradHundredThousands = "";
          break;
        case 1 :
          tradHundredThousands = "one thousand ";
          break;
        default :
          tradHundredThousands = convertLessThanOneThousand(hundredThousands) 
          + " thousand ";
        }
        result =  result + tradHundredThousands;
    
        String tradThousand;
        tradThousand = convertLessThanOneThousand(thousands);
        result =  result + tradThousand;
    
        // remove extra spaces!
        return result.replaceAll("^\s+", "").replaceAll("\b\s{2,}\b", " ");
      }
    
      /**
       * testing
       * @param args
       */
      public static void main(String[] args) {
    	  NumberToWords nw = new NumberToWords();
    
    	  System.out.println("*** " + nw.convert(1031));
    	  System.out.println("*** " + nw.convert(1030));
        System.out.println("*** " + nw.convert(0));
        System.out.println("*** " + nw.convert(1));
        System.out.println("*** " + nw.convert(36));
        System.out.println("*** " + nw.convert(136));
        System.out.println("*** " + nw.convert(1030));
        System.out.println("*** " + nw.convert(1036));
        System.out.println("*** " + nw.convert(1236));
    
        System.out.println("*** " + nw.convert(3000000010L));
    	  
    	  
        /*
         *** zero
         *** one
         *** sixteen
         *** one hundred
         *** one hundred eighteen
         *** two hundred
         *** two hundred nineteen
         *** eight hundred
         *** eight hundred one
         *** one thousand three hundred sixteen
         *** one million 
         *** two millions 
         *** three millions two hundred
         *** seven hundred thousand 
         *** nine millions 
         *** nine millions one thousand 
         *** one hundred twenty three millions four hundred 
         **      fifty six thousand seven hundred eighty nine
         *** two billion one hundred forty seven millions 
         **      four hundred eighty three thousand six hundred forty seven
         *** three billion ten
         **/
      }
    }
    

  • 相关阅读:
    关于python的打包打包完生成exe文件之后,不能正常执行程序的问题解决。
    通过Python读取sqlserver数据写成json文件的总结
    关于在mysql数据库当中,批量查询一堆表的表名称和对应的行数的时候,批量查询的和单独查询出来的数据有差异
    通过Python读取csv文件报错的File "D:Pythonlibcodecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x90 in
    关于redshift数据库和mysql数据库当中的concat函数的使用语法总结
    关于在kettle当中使用循环去读取数据做etl操作。
    关于aws当中的redshift自定义函数的部署和创建(UDF)
    关于Python当中时间戳和服务器上面的时间戳的处理
    SVN服务器搭建和使用以及冲突解决、用户密码修改
    成为Java顶尖高手要看的11本书
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5038060.html
Copyright © 2011-2022 走看看