
import java.math.BigDecimal;
public class ChineseCurrency {
// 中文金额单位数组
String[] arrChineseUnit = { "分", "角", "圆", "拾", "佰", "仟", "万", "拾", "佰",
"仟", "亿", "拾", "佰", "仟" };
// 中文数字字符数组
String[] arrChineseNum = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
/**
* Description 将数字金额转换为中文金额
*
* @param BigDecimal
* bigdMoneyNumber 转换前的数字金额
* @return String 调用:<br/>
* myToChineseCurrency("101.89")="壹佰零壹圆捌角玖分"
* myToChineseCurrency("100.89")="壹佰零捌角玖分"
* myToChineseCurrency("100")="壹佰圆整"
*/
public String DoNumberCurrencyToChineseCurrency(BigDecimal moneyNumber) {
String strChineseCurrency = "";
// 零数位标记
boolean isZero = true;
// 中文金额单位下标
int chineseUnitIndex = 0;
try {
if (moneyNumber.intValue() == 0) {
return "零圆整";
}
// 处理小数部分,四舍五入
double doubMoneyNumber = Math
.round(moneyNumber.doubleValue() * 100);
// 是否负数
boolean bNegative = doubMoneyNumber < 0;
// 取绝对值
doubMoneyNumber = Math.abs(doubMoneyNumber);
// 循环处理转换操作
while (doubMoneyNumber > 0) {
// 整的处理(无小数位)
if (chineseUnitIndex == 2 && strChineseCurrency.length() == 0)
strChineseCurrency = strChineseCurrency + "整";
// 非零数位的处理
if (doubMoneyNumber % 10 > 0) {
strChineseCurrency = arrChineseNum[(int) doubMoneyNumber % 10]
+ arrChineseUnit[chineseUnitIndex]
+ strChineseCurrency;
isZero = false;
}
// 零数位的处理
else {
// 元的处理(个位)
if (chineseUnitIndex == 2) {
// 段中有数字
if (doubMoneyNumber > 0) {
strChineseCurrency = arrChineseUnit[chineseUnitIndex]
+ strChineseCurrency;
isZero = true;
}
}
// 万、亿数位的处理
else if (chineseUnitIndex == 6 || chineseUnitIndex == 10) {
// 段中有数字
if (doubMoneyNumber % 1000 > 0)
strChineseCurrency = arrChineseUnit[chineseUnitIndex]
+ strChineseCurrency;
}
// 前一数位非零的处理
if (!isZero) {
strChineseCurrency = arrChineseNum[0]
+ strChineseCurrency;
}
isZero = true;
}
doubMoneyNumber = Math.floor(doubMoneyNumber / 10);
chineseUnitIndex++;
}
// 负数的处理
if (bNegative)
strChineseCurrency = "负" + strChineseCurrency;
} catch (Exception e) {
}
return strChineseCurrency;
}
}
public class ChineseCurrency {
// 中文金额单位数组
String[] arrChineseUnit = { "分", "角", "圆", "拾", "佰", "仟", "万", "拾", "佰",
"仟", "亿", "拾", "佰", "仟" };
// 中文数字字符数组
String[] arrChineseNum = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
/**
* Description 将数字金额转换为中文金额
*
* @param BigDecimal
* bigdMoneyNumber 转换前的数字金额
* @return String 调用:<br/>
* myToChineseCurrency("101.89")="壹佰零壹圆捌角玖分"
* myToChineseCurrency("100.89")="壹佰零捌角玖分"
* myToChineseCurrency("100")="壹佰圆整"
*/
public String DoNumberCurrencyToChineseCurrency(BigDecimal moneyNumber) {
String strChineseCurrency = "";
// 零数位标记
boolean isZero = true;
// 中文金额单位下标
int chineseUnitIndex = 0;
try {
if (moneyNumber.intValue() == 0) {
return "零圆整";
}
// 处理小数部分,四舍五入
double doubMoneyNumber = Math
.round(moneyNumber.doubleValue() * 100);
// 是否负数
boolean bNegative = doubMoneyNumber < 0;
// 取绝对值
doubMoneyNumber = Math.abs(doubMoneyNumber);
// 循环处理转换操作
while (doubMoneyNumber > 0) {
// 整的处理(无小数位)
if (chineseUnitIndex == 2 && strChineseCurrency.length() == 0)
strChineseCurrency = strChineseCurrency + "整";
// 非零数位的处理
if (doubMoneyNumber % 10 > 0) {
strChineseCurrency = arrChineseNum[(int) doubMoneyNumber % 10]
+ arrChineseUnit[chineseUnitIndex]
+ strChineseCurrency;
isZero = false;
}
// 零数位的处理
else {
// 元的处理(个位)
if (chineseUnitIndex == 2) {
// 段中有数字
if (doubMoneyNumber > 0) {
strChineseCurrency = arrChineseUnit[chineseUnitIndex]
+ strChineseCurrency;
isZero = true;
}
}
// 万、亿数位的处理
else if (chineseUnitIndex == 6 || chineseUnitIndex == 10) {
// 段中有数字
if (doubMoneyNumber % 1000 > 0)
strChineseCurrency = arrChineseUnit[chineseUnitIndex]
+ strChineseCurrency;
}
// 前一数位非零的处理
if (!isZero) {
strChineseCurrency = arrChineseNum[0]
+ strChineseCurrency;
}
isZero = true;
}
doubMoneyNumber = Math.floor(doubMoneyNumber / 10);
chineseUnitIndex++;
}
// 负数的处理
if (bNegative)
strChineseCurrency = "负" + strChineseCurrency;
} catch (Exception e) {
}
return strChineseCurrency;
}
}