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

原创 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) {
// }
}

java将数字转化为大写方法

// 日期转化为大小写 public static String dataToUpper(String dateStr) { String res=""...
  • winter13292
  • winter13292
  • 2013年08月28日 09:36
  • 4132

java数字转汉字大写(全)

MoneyUtil.javapublic class MoneyUtil { public static String[] chineseDigits = new String[] { "零",...
  • yulin_xp
  • yulin_xp
  • 2009年06月27日 19:04
  • 10643

php将钱数数字转换为中文汉字

public function cny() { $ns = 32178128746; static $cnums=array('零','壹','贰','叁','肆','...
  • linlin_xia
  • linlin_xia
  • 2017年04月01日 14:27
  • 384

[iOS] 阿拉伯数字转汉字

// 阿拉伯数字转汉字 + (NSString *)ChineseWithInteger:(NSInteger)integer { NSNumberFormatter *formatter =...
  • Enjolras1024
  • Enjolras1024
  • 2016年08月25日 09:59
  • 799

Java/android 金额 数字转成大写汉子

今天翻看自己的代码,发现了自己写的金额数字转成大写的代码,当然我也是在别人的基础上修改的,当时从网上copy了一份代码,发现能用,但是有很多bug,然后自己在别人的基础上修改了一番,满足了自己的应用!...
  • beyond181
  • beyond181
  • 2015年02月11日 10:56
  • 3476

用JQuery方法,将会计数字转换为大写

最近结了一单任务,编写OA里的差旅费报销。要求将填写的数字按位数逐个填入表单中,并自动转换为中文大写。如下图:1处为传递来的数据,通过JS拆分填入2,再转为大写填入3处. 这里主要介绍“数字...
  • hlbt0112
  • hlbt0112
  • 2017年06月02日 16:03
  • 753

用Python将数字转换为中文大写

利用Python将阿拉伯数字转化为中文大写,其实最麻烦的地方就是中间空多个0的问题,这种情况下,采用拆分法则,将一个大数字,先拆分成整数部分和小数部分,再对整数部分按照仟、万、亿、兆分位拆分为四个字符...
  • zzcwing
  • zzcwing
  • 2013年04月06日 04:26
  • 3109

数字变成大写的类,把人民币转化为大写汉字

 import java.math.BigDecimal; public class ConvertNumber ...{   /** *//** 定义数组存放数字对应的大写 */   private...
  • java2000_net
  • java2000_net
  • 2007年12月19日 19:46
  • 5253

金额转换为中文大写

c/c++简单的字符串操作。大概内容就是将一个数字字符串转换成中文字符串。...
  • liu8886
  • liu8886
  • 2015年09月09日 18:23
  • 1926

将数字转为中文金额的大写方式(C++版)

/**   * 程序目的:   *   从命令行接收一个数,并将其转化为中文金额的大写方式(C++版)   * 例如 123.45 --> 壹佰贰拾叁元肆角伍分   * @author Lov...
  • u010944926
  • u010944926
  • 2014年03月08日 15:57
  • 3249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单的将数字转化为汉字大写的方法
举报原因:
原因补充:

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