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,可直接调用
### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...
总的来说,"金额小写转大写_sql函数"这个主题涉及到数据库编程、SQL函数开发和财务数据处理。通过理解和应用这些知识,数据库管理员和开发者能够更好地满足财务系统的需求,确保数据的准确性和合规性。
C#将小写金额转换成大写,很高兴能与大家分享我的资源
本文将详细介绍"BAT批处理脚本-格式转换-人民币金额小写转大写.cmd.zip"这个压缩包中的知识点,以及如何利用批处理脚本来实现人民币金额的小写到大写的转换。 首先,我们要理解批处理脚本的基本概念。批处理脚本是...
在 DELPHI 开发环境中,将金额小写转换为大写是常见的财务处理需求,尤其在打印发票或制作财务报表时。这个需求涉及到字符串处理和字符转换的知识点。以下是一些核心概念和实现方法的详细解释: 1. **金额格式**:...
通过js代码将小写金额转换成大写金额,将大写金额转换成数字
"js金额小写转大写脚本"指的是JavaScript编程语言中用于将小写的货币金额(阿拉伯数字)转换为大写的汉字数字的代码片段。这样的脚本有助于提高财务报表的可读性和规范性,因为在中国,正式的财务文档通常要求金额以...
"人民币金额小写转大写"是一个常见的需求,它涉及到将阿拉伯数字(小写)转换成中文汉字(大写),以减少书写错误和欺诈的风险。在.NET框架下,C#语言提供了丰富的功能来处理这种转换。 首先,我们需要理解人民币...
在C#编程环境中,将金额小写转换为大写是一项常见的需求,特别是在财务软件或银行系统中。在Microsoft Visual Studio 2010这个开发环境下,利用.NET Framework 4.0提供的类库和方法,我们可以编写出高效且准确的转换...
在IT行业中,编程时常涉及到各种数据格式的转换,其中一种常见的需求是将小写的数字金额转换为财务报表中常用的大写格式。这个过程通常是为了确保财务记录的清晰度和准确性,因为大写数字在视觉上更不容易被篡改。...
可以实现高到垓位低到毫的 人民币金额小写转大写 C#完整的程序。
### Oracle中将小写金额转换为大写金额的函数实现 在Oracle数据库中,有时我们需要将数字金额转换成中文大写形式,特别是在财务系统中,这样的功能非常实用且常见。本文将详细介绍一个自定义的Oracle函数`money_to_...
javascript金额小写转大写,支持到小数点前13位。
在IT行业中,尤其是在财务软件开发或者处理金融数据时,经常需要将小写金额转换成大写金额,以便于正式的财务报表和凭证的制作。在编程中,这种转换通常通过编写特定的函数来实现。本篇文章将详细讲解如何用PB...
小写金额转换大写金额,小写金额转换大写金额.
用JAVA书写的一个大写金额转化为小写金额的类
金额小写转大写,非常好用的工具!