一个简单的将数字转化为汉字大写的方法

原创 2005年02月25日 23:29:00

package com.abc.ebank.util;

/**
 * @author wangshuangli
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */
public class Digit2ChineseNumber {

 /**
  * Constructor for Digit2ChineseNumber.
  */
 public Digit2ChineseNumber() {
  super();
 }
 /**将金额小写转化为大写
  * Method Number2Cap.
  * @param amount
  * @return String
  * 首先将小写数字转化为大写汉字,中间不作其他事情
  * 然后再在其中添加"万"等东西;
  */
 public static String Number2Cap(String amount) {

  amount = Num2ChCap(amount);

  int decimal_address; //小数点的位置如果没有小数点则值为数值长度加1;,有小数点则为小数点所在位置
  String s_decimal = "";
  if (amount.indexOf('.') != -1) { //有小数点的情况
   decimal_address = amount.indexOf('.');
   s_decimal = amount.substring(decimal_address + 1);
   if (s_decimal.trim().equals("零零")) {
    s_decimal = "";
   } else if (s_decimal.trim().equals("零")) {
    s_decimal = "";
   } else {
    s_decimal = DecAddUnit(s_decimal);
   }
  } else {
   decimal_address = amount.length() + 1;
  }
  String s_Int = amount.substring(0, decimal_address);
  s_Int = IntAddUnit(s_Int);
  s_Int = Coordinate_String(s_Int); //整理字符串将一些多余的东西去除
  return s_Int + s_decimal + "整";
 }

 /**整理字符串将一些多余的东西去除如零元零万等
  * Method Coordinate_String.
  * @param s_Int
  * @return String
  */
 private static String Coordinate_String(String s_Int) {
  int address;
  //for循环去除零
  for (; true;) {
   address = s_Int.indexOf("零万");
   if (address == -1) {
    address = s_Int.indexOf("零仟");
   }
   if (address == -1) {
    address = s_Int.indexOf("零佰");
   }
   if (address == -1) {
    address = s_Int.indexOf("零拾");
   }
   if (address == -1) {
    address = s_Int.indexOf("零亿");
   }
   if (address == -1) {
    address = s_Int.indexOf("零元");
   }
   if (address == -1)
    break;
   System.err.println(s_Int.substring(0, address));
   System.err.println(s_Int.substring(address + 2));
   s_Int = s_Int.substring(0, address) + s_Int.substring(address + 1);
  }
  String tmp = "@亿@万@千@佰@拾亿万亿仟亿佰亿拾万仟万佰万拾仟佰仟拾佰拾";
  s_Int = "@" + s_Int;
  for (int i = 0; i < tmp.length();) {
   String tmp1 = tmp.substring(i, i + 2);
   address = 0;
   for (; true;) {
    address = s_Int.indexOf(tmp1);
    if (address == -1)
     break;
    System.err.println(s_Int.substring(0, address + 1));
    System.err.println(s_Int.substring(address + 2));
    s_Int =
     s_Int.substring(0, address + 1)
      + s_Int.substring(address + 2);
   }
   i += 2;
  }
  return s_Int.substring(1);
 }

 /**添加万仟佰拾亿仟佰拾万仟佰拾元到字符串对应位置
  * Method IntAddUnit.
  * @param s_Int
  * @return String
  */
 private static String IntAddUnit(String s_Int) {
  String Units = "元拾佰仟万拾佰仟亿拾佰仟万";

  s_Int = StringOverTurn(s_Int);
  int s_Int_length = s_Int.length();
  String tmp = "";
  for (int i = 0; i < s_Int_length; i++) {
   tmp =
    tmp
     + String.valueOf(Units.charAt(i))
     + String.valueOf(s_Int.charAt(i));
  }
  tmp = StringOverTurn(tmp);
  return tmp;
 }

 /**字符串翻转将从abcdefg翻转为gfedcba
  * Method StringOverTurn.
  * @param s_Int
  * @return String
  */
 private static String StringOverTurn(String s_Int) {
  ;
  int s_Int_length = s_Int.length();
  char[] Overtmp = s_Int.toCharArray();
  String tmp = "";
  for (int i = s_Int_length - 1; i > -1; i--) {
   tmp = tmp + Overtmp[i];
  }
  return tmp;
 }

 /**将角分加入字符串对应位置中
  * Method DecAddUnit.
  * @param s_decimal
  * @return String
  */
 private static String DecAddUnit(String returnString) {

  switch (returnString.length()) {
   //小数长度为1表示只有角无分
   case 1 :
    returnString =
     returnString.substring(0, 1)
      + "角"
      + returnString.substring(2);

    break;
    //小数长度为2表示有角有分
   case 2 :
    returnString =
     returnString.substring(0, 1)
      + "角"
      + returnString.substring(1, 2)
      + "分";

    break;
  } //end of swtich
  return returnString;
 }

 /**将数字转换为中文大写
  * 返回格式为壹贰.壹贰
  * Method Num2ChCap.
  * @param amount
  * @return String
  */
 private static String Num2ChCap(String amount) {
  int length = amount.length();
  char CapNumber;
  String returnString = "";
  for (int i = 0; i < length; i++) {
   CapNumber = amount.charAt(i);
   switch (CapNumber) {
    case '0' :
     returnString = returnString + "零";
     break;
    case '1' :
     returnString = returnString + "壹";
     break;
    case '2' :
     returnString = returnString + "贰";
     break;
    case '3' :
     returnString = returnString + "叁";
     break;
    case '4' :
     returnString = returnString + "肆";
     break;
    case '5' :
     returnString = returnString + "伍";
     break;
    case '6' :
     returnString = returnString + "陆";
     break;
    case '7' :
     returnString = returnString + "柒";
     break;
    case '8' :
     returnString = returnString + "捌";
     break;
    case '9' :
     returnString = returnString + "玖";
     break;
    case '.' :
     returnString = returnString + ".";
     break;
   } //end of case;
  } //end of for;
  return returnString;

 }

// public static void main(String[] args) {
// }
}

相关文章推荐

如下的加法算式:其中每个汉字代表一个数字,填写“让我怎能过大年” 所代表的整数。

有如下的加法算式。其中每个汉字代表一个数字。 (如果存在对齐问题,可参见【图1.png】)                         年                     大年     ...

汉字与字母数字之间的转化方法

  • 2014年01月25日 13:53
  • 59KB
  • 下载

金额从数字转换成中文汉字大写的实现

以下简单封装的实现方法,详细见注释class money2chinese { private $amount; // 金额 private $num2chinese; // 大写数字 ...

把一个用阿拉伯数字表示的正整数转换成汉字大写表示

一个面试题,考查面试者的逻辑思维能力,考虑的问题很多,把一个用阿拉伯数字表示的正整数转换成汉字大写表示 这里代码没有考虑非法输入,但如果是面试。最好跟面试官交流清楚,展现你考虑问题全面,写出的代码鲁...

Java实现匹配一个给定输入的字符串中汉字、数字、英文字母、空格数量

学习Java依旧在路上,内容越多就要钻的越深入才能记得越深刻理解的越到位,这是我自己最深的感悟。今天利用Java写了一个小程序用来判断指定的字符串中各种各类型的字符包括:汉字、数字、英文字母、空格的数...

Java面试题--输入一个数字输出对应的汉字

比如: 输入:120,输出一百二; 输入:120034,输出一十二万零三十四; Java实现代码如下: import java.util.Scanner; public class Convert...

Excel数字小写金额转换汉字大写金额公式的简单设置

_________ Excel数字小写金额转换汉字大写金额公式的简单设置  华能呼伦贝尔能源有限公司 卞学敏 Excel数字小写金额转换汉字大写金额公式在会计工作中是经常应用到的,它能提高工作效...
  • mfkpie
  • mfkpie
  • 2014年05月31日 23:19
  • 16800

中文汉字 转成数字 编码 方法【转】

class StrFormat_F10{ static function encode($var){ $ascii = ''; $strlen_var = strle...

PHP正则提取啊汉字字母数字下划线的方法以及常用正则表达式

PHP常用正则表达式 "^\d+$"  //非负整数(正整数+ 0) "^[0-9]*[1-9][0-9]*$"  //正整数 "^((-\d+)|(0+))$"  //非正整数(负整数+ 0) "^...
  • zqtsx
  • zqtsx
  • 2014年02月25日 15:23
  • 4156

Android用SurfaceView写一个简单有趣的游戏--《数字组合》之一

最近突然有了一个想法--做一款android的简单游戏练练手,既要实现起来简单(毕竟只有一个人,框架什么的暂且就不用考虑了),又要能够达到对android知识框架的复习和游戏要有可玩性,终于用了几个星...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单的将数字转化为汉字大写的方法
举报原因:
原因补充:

(最多只允许输入30个字)