数字转换中文

开发 开发工具
博主发表的文章,有的是自己原创,有的是这些年本人从网上积累的,方便大家学习。

 [[178881]]

  1. import java.util.Arrays; 
  2. import java.util.HashMap; 
  3. import java.util.Map; 
  4. /** 
  5.  * 数字转中文,***为千亿 
  6.  */ 
  7. public class NumTotring { 
  8.  
  9.  public static void main(String[] args) { 
  10.  String a[] = { "129830200000""12983020000""1298302000"
  11.  "129830200""23000042""2000042""100345""23864""1000"
  12.  "1234""123""23""5""20000000""10086""10010" }; 
  13.  for (int i = 0; i < a.length; i++) { 
  14.  System.out.println("原数字为:" + a[i] + "切换后的读法为:" + readChinese(Long.parseLong(a[i]))); 
  15.  } 
  16.  } 
  17.  
  18.  //处理0、1、2……9的中文读法的 
  19.  private static Map<Integer, String> numberStringMap = new HashMap<Integer, String>(); 
  20.  
  21.  //10进制的读法 
  22.  private static Map<Integer, String> base10StringMap = new HashMap<Integer, String>(); 
  23.  
  24.  static { 
  25.  numberStringMap.put(0, "零"); 
  26.  numberStringMap.put(1, "壹"); 
  27.  numberStringMap.put(2, "贰"); 
  28.  numberStringMap.put(3, "叁"); 
  29.  numberStringMap.put(4, "肆"); 
  30.  numberStringMap.put(5, "伍"); 
  31.  numberStringMap.put(6, "陆"); 
  32.  numberStringMap.put(7, "柒"); 
  33.  numberStringMap.put(8, "捌"); 
  34.  numberStringMap.put(9, "玖"); 
  35.  
  36.  base10StringMap.put(1, ""); 
  37.  base10StringMap.put(2, "十"); 
  38.  base10StringMap.put(3, "百"); 
  39.  base10StringMap.put(4, "千"); 
  40.  base10StringMap.put(5, "万"); 
  41.  } 
  42.  
  43.  private static String readChinese(long a) { 
  44.  String intString = a + ""
  45.  char ichar[] = intString.toCharArray(); 
  46.  
  47.  char icharrevert[] = revertCharArray(ichar); 
  48.  
  49.  int i = 0; 
  50.  String result = ""
  51.  while (i < icharrevert.length) { 
  52.  int j=i + 4 < icharrevert.length ? i + 4 : icharrevert.length; 
  53.  char[] icharsplit = Arrays.copyOfRange(icharrevert, i, j); 
  54.  result = processSplitedNumber(icharsplit, (i + 1) / 4) + result; 
  55.  i = i + 4; 
  56.  } 
  57.  return result; 
  58.  
  59.  } 
  60.  /** 
  61.  * 将得到的数组倒排,这样做原因是因为读的时候从前往后读, 位数前面的高 
  62.  */ 
  63.  private static char[] revertCharArray(char[] ichar) { 
  64.  char icharNew[] = new char[ichar.length]; 
  65.  for (int i = ichar.length - 1, j = 0; i >= 0 && j < ichar.length; i--, j++) { 
  66.  icharNew[j] = ichar[i]; 
  67.  } 
  68.  return icharNew; 
  69.  } 
  70.  
  71.  private static String processSplitedNumber(char[] num, int time) { 
  72.  StringBuffer sb = new StringBuffer(); 
  73.  for (int i = num.length - 1; i >= 0; i--) { 
  74.  if (num[i] == '0') { 
  75.  //当前数字是0.并且是***一位,直接不读 
  76.  if (i == 0) { 
  77.  continue
  78.  } 
  79.  //当前数字是0,下一个数字不是0,补一个0上去读 
  80.  if (num[i - 1] != '0') { 
  81.  sb.append(numberStringMap.get(Integer.valueOf(num[i] + ""))); 
  82.  } else { 
  83.  continue
  84.  } 
  85.  } else { 
  86.  //如果当前位数不是0,那就正常的读出数字和位 
  87.  sb.append(numberStringMap.get(Integer.valueOf(num[i] + ""))); 
  88.  sb.append(base10StringMap.get(i + 1)); 
  89.  } 
  90.  } 
  91.  if (time == 0) { 
  92.  } else if (time == 1) { 
  93.  sb.append("万"); 
  94.  } else if (time == 2) { 
  95.  sb.append("亿"); 
  96.  } 
  97.  return sb.toString(); 
  98.  } 
  1. 原数字为:129830200000切换后的读法为:壹千贰百玖十捌亿叁千零贰十万
  2. 原数字为:12983020000切换后的读法为:壹百贰十玖亿捌千叁百零贰万
  3. 原数字为:1298302000切换后的读法为:壹十贰亿玖千捌百叁十万贰千
  4. 原数字为:129830200切换后的读法为:壹亿贰千玖百捌十叁万零贰百
  5. 原数字为:23000042切换后的读法为:贰千叁百万零肆十贰
  6. 原数字为:2000042切换后的读法为:贰百万零肆十贰
  7. 原数字为:100345切换后的读法为:壹十万零叁百肆十伍
  8. 原数字为:23864切换后的读法为:贰万叁千捌百陆十肆
  9. 原数字为:1000切换后的读法为:壹千
  10. 原数字为:1234切换后的读法为:壹千贰百叁十肆
  11. 原数字为:123切换后的读法为:壹百贰十叁
  12. 原数字为:23切换后的读法为:贰十叁
  13. 原数字为:5切换后的读法为:伍
  14. 原数字为:20000000切换后的读法为:贰千万
  15. 原数字为:10086切换后的读法为:壹万零捌十陆
  16. 原数字为:10010切换后的读法为:壹万零壹十

【本文是51CTO专栏作者张勇波的原创文章,转载请通过51CTO获取作者授权】

责任编辑:武晓燕 来源: 上下求索的Z先生博客
相关推荐

2009-08-21 17:02:31

C#编写数字转换中文算

2016-12-14 09:07:54

日期转换中文

2010-10-27 13:25:33

Oracle查询

2010-03-11 17:38:20

Python中文

2019-03-25 20:31:58

IP地址转换数字

2024-02-26 08:05:00

Pythonpypinyin开发

2010-05-21 17:14:18

MySQL 数字类型

2010-03-24 18:00:30

Python中文转换u

2009-07-31 14:09:41

c#时间格式转换

2010-07-14 16:10:37

Perl

2024-04-02 09:26:07

C#中文数字编程语言

2009-12-04 14:29:09

PHP json_en

2010-10-27 13:39:34

Oracle查询

2010-05-24 15:53:44

MySQL内置函数

2010-09-09 11:02:36

SQL函数IP

2021-08-20 06:58:31

C++Python函数

2009-12-07 16:12:32

中文Python中文编程

2021-02-21 09:25:41

开源技术 工具

2023-01-17 14:01:19

JavaScript类型转换字符串

2017-06-04 15:24:31

BCD码十进制字符串
点赞
收藏

51CTO技术栈公众号