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;
}
}