package com.liba.link;
public class Exchange {
private static final String chs[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };
/**
*
* @param money
* 金额数字串
* @return 金额中文大写 将输入数字串money分割成4位数,将四位数转换成金额大写后再加上单位("","万","亿")
*/
public String numToRMB(String money) {
StringBuilder chRMB = new StringBuilder();
if(money.equals("0.00")){
return "零元";
}
try {
double t = Double.parseDouble(money);
if (t < 0) {
System.out.println("金额不能是负的!");
throw new IllegalArgumentException("金额不能是负的!");
}
} catch (NumberFormatException e) {
System.out.println("输入数据有误,请检查!");
throw new IllegalArgumentException("输入数据有误,请检查!");
}
int dotPos = money.indexOf('.');
String strz;// 截取整数部分
if (dotPos == -1) {
strz = money;
} else {
strz = money.substring(0, dotPos);// 整数部分
}
StringBuilder sb = new StringBuilder(strz);
strz = sb.toString();
String cur = "";
boolean zero = false;// 记录是否应该加‘零’如 2001,读作 贰仟零壹元
String temp;
String digits;// 每次截取的最后四位数
while (strz.length() > 0) {
if (strz.length() >= 4) {
digits = strz.substring(strz.length() - 4);
strz = strz.substring(0, strz.length() - 4);
} else {
digits = strz;
strz = "";
}
temp = fourMaxChange(digits);
if (temp.equals("零")) {
if (cur.equals("亿")) {
chRMB.insert(0, "亿");
}
if (zero == true) {
if (!chRMB.substring(0, 1).equals("零"))
chRMB.insert(0, "零");
zero = false;
}
} else {
temp += cur;
chRMB.insert(0, temp);
if (digits.charAt(0) == '0')
if (chRMB.length() >= 1
&& !chRMB.substring(0, 1).equals("零"))
chRMB.insert(0, "零");
zero = true;
}
if (cur.equals("")) {// 改变单位
cur = "万";
} else if (cur.equals("亿")) {
cur = "万";
} else
cur = "亿";
}
String strx;
if (dotPos != -1) {// 有小数
strx = money.substring(dotPos + 1);
if (strx.length() > 2) {
System.out.println("金额只允许两位小数!");
throw new IllegalArgumentException("金额只允许两位小数!");
// return null;
}
int xiaoshu = Integer.parseInt(strx);// 小数部分
if (xiaoshu == 0 || strx.length() == 0) {
chRMB.append("元");// 整
} else
chRMB.append("元");
if (strx.length() == 1) {
chRMB.append(chs[xiaoshu]).append("分");
} else {
if (xiaoshu / 10 != 0) {
chRMB.append(chs[xiaoshu / 10]).append("角");
} else {
// chRMB.append("零");
}
if (xiaoshu % 10 != 0) {
chRMB.append(chs[xiaoshu % 10]).append("分");
}
}
} else {
chRMB.append("元");
}
return chRMB.toString();
}
/**
*
* @param number
* 输入数字串
* @return 转换后的大写金额
* @throws NumberFormatException
* 不合法的数字 将最多四位整数转换成大写金额
*/
public String fourMaxChange(String number) throws NumberFormatException {// 将最多四位整数转换成大写金额
StringBuilder rs = new StringBuilder();
int money;
money = Integer.parseInt(number);
boolean zero = false;
if (money / 1000 != 0) {
zero = true;
rs.append(chs[money / 1000]).append("仟");
money %= 1000;
}
if (money / 100 != 0) {
zero = true;
rs.append(chs[money / 100]).append("佰");
money %= 100;
} else if (zero == true) {
rs.append(chs[0]);// 零
money %= 100;
}
if (money / 10 != 0) {
zero = true;
rs.append(chs[money / 10]).append("拾");
money %= 10;
} else if (zero == true && !rs.substring(rs.length() - 1).equals("零")) {
rs.append(chs[0]);// 零
money %= 10;
}
if (money != 0) {
zero = true;
rs.append(chs[money]);
} else if (zero == true && rs.substring(rs.length() - 1).equals("零")) {
rs.delete(rs.length() - 1, rs.length());
}
if (zero == true)
return rs.toString();
else
return chs[0];// 零
}
}
分享到:
相关推荐
金额小写转大写完整版本js,可直接调用
金额小写转大写_sql函数
DELPHI金额小写转大写 附带调用程序!
C#将小写金额转换成大写,很高兴能与大家分享我的资源
通过js代码将小写金额转换成大写金额,将大写金额转换成数字
从金额小写数字转换到金额大写,包括小数。.NET C#源代码。
1. 最大支持百万亿(15位整数,2位小数) ;或仟万亿(16位整数) 2. 超过最大支持仟万亿(16位整数),只输出大写数字 3. 整数部分越大,则小数部分输出越不精确 4. 负数,则忽略负号
可以实现高到垓位低到毫的 人民币金额小写转大写 C#完整的程序。
将输入的小写金额自动转换成财务所需的大写金额
基于Microsoft Visual Studio 2010,Framework 4.0版本开发的小写转换大写,支持任意小数位和指定小数位的字符转换成中文大写
javascript金额小写转大写,支持到小数点前13位。
小写金额转换大写金额,小写金额转换大写金额.
oracle中将小写金额转换为大写金额函数 oracle中将小写金额转换为大写金额函数
金额小写转大写,非常好用的工具!
金额小写转大写,练手写的,还可以,个人感觉……
pb9 金额小写转大写 string CN_NUM[10] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}//大写0-9 string CN_CARRY[19] = {"分","角","","元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万...
在VFP中如何实现金额小写转换成大写
人民币金额小写转换大写工具 1.0 绿色版