[学习笔记]Java将数字金额转换为中文金额

/**
* Description 将数字金额转换为中文金额
* @param <p>BigDecimal bigdMoneyNumber 转换前的数字金额</P>
* @return String
调用:myToChineseCurrency("101.89")="壹佰零壹圆捌角玖分"
myToChineseCurrency("100.89")="壹佰零捌角玖分"
myToChineseCurrency("100")="壹佰圆整"
*/
public String doNumberCurrencyToChineseCurrency(double bigdMoneyNumber) {
//中文金额单位数组
String [] straChineseUnit = new String[] {"分", "角", "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
//中文数字字符数组
String [] straChineseNumber = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String strChineseCurrency = "";
//零数位标记
boolean bZero = true;
//中文金额单位下标
int ChineseUnitIndex = 0;

try {
if (bigdMoneyNumber == 0)
return "零圆整";

//处理小数部分,四舍五入
double doubMoneyNumber = Math.round(bigdMoneyNumber * 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 = straChineseNumber[(int)doubMoneyNumber % 10] + straChineseUnit[ChineseUnitIndex] + strChineseCurrency;
bZero = false;
}
//零数位的处理
else {
//元的处理(个位)
if (ChineseUnitIndex == 2 ) {
//段中有数字
if (doubMoneyNumber > 0) {
strChineseCurrency = straChineseUnit[ChineseUnitIndex] + strChineseCurrency;
bZero = true;
}
}
//万、亿数位的处理
else if (ChineseUnitIndex == 6 || ChineseUnitIndex == 10) {
//段中有数字
if (doubMoneyNumber % 1000 > 0)
strChineseCurrency = straChineseUnit[ChineseUnitIndex] + strChineseCurrency;
for(int i=0;i<10;i++){
if(doubMoneyNumber==1000*i){
strChineseCurrency = straChineseUnit[ChineseUnitIndex] + strChineseCurrency;
}
}

}

//前一数位非零的处理
if (!bZero)
strChineseCurrency = straChineseNumber[0] + strChineseCurrency;

bZero = true;
}

doubMoneyNumber = Math.floor(doubMoneyNumber / 10);
ChineseUnitIndex ++;
}

//负数的处理
if (bNegative)
strChineseCurrency = "负" + strChineseCurrency;
}
catch (Exception e) {
e.printStackTrace();

return "";
}

return strChineseCurrency;
}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值