import java.text.NumberFormat;
/**
* 将小写金额转换为中文大写金额的类
* @author mirage
*
*/
public class MoneyUtil {
public static void main(String[] args) {
System.out.println("is [" + changeMoney(101001.00));
}
public static String changeMoney(String nMoney) {
try
{
String result = "";
String strValue = nMoney;
int dotIndex = strValue.indexOf('.');
String afterDot;
if (dotIndex == -1)
{
dotIndex = strValue.length();
afterDot = "";
}
else
afterDot = strValue.substring(dotIndex+1);
String beforeDot = strValue.substring(0, dotIndex).trim();
int len = 0;
//before dot
len = beforeDot.length();
char[] unit = {'圆', '万', '亿', '万'};
char[] subunit = {'拾', '佰', '仟'};
int i = 0, j = 0, k = 0; //j is use to subunit,k is use to unit
char oldC = '3';
char zero = '零';
char cc = '0';
result = unit[0] + result;
boolean oldHasN = false;
boolean hasN = false;
boolean allZero = true;
for (i = 0; i < len; i++)
{
if (j == 0 && i != 0)
{
if (!hasN)
{
if ((k % 2) == 0)
{
result = result.substring(1);
}
}
else
{
if (oldC == '0')
result = zero + result;
}
result = unit[k] + result;
//oldC = '3';
oldHasN = hasN;
hasN = false;
}
cc = beforeDot.charAt(len - i - 1);
if (oldC == '0' && cc != oldC)
{
if (hasN)
result = zero + result;
}
if (cc != '0')
{
if (j != 0)
result = subunit[j - 1] + result;
char dig = '0';
switch (cc)
{
case '1' :
dig = '壹';
break;
case '2' :
dig = '贰';
break;
case '3' :
dig = '叁';
break;
case '4' :
dig = '肆';
break;
case '5' :
dig = '伍';
break;
case '6' :
dig = '陆';
break;
case '7' :
dig = '柒';
break;
case '8' :
dig = '捌';
break;
case '9' :
dig = '玖';
break;
}
if (dig == '0')
return "err";
hasN = true;
allZero = false;
result = dig + result;
}
oldC = cc;
j++;
if (j == 4)
{
k++;
j = 0;
}
}
if (allZero)
{
result = "零圆";
}
else
{
int bb = 0;
if (!hasN)
{
bb++;
if (!oldHasN)
{
bb++;
}
}
if (bb != 0)
result = result.substring(bb);
if (result.charAt(0) == '零')
result = result.substring(1);
}
//after dot
// mirage add 2003/3/26
len = 0;
len = afterDot.length();
char[] unit1 = {'角', '分'};
hasN = false;
if (len>2)
len = 2;
if (len!=0)
{
for (i=0; i<len; i++)
{
cc = afterDot.charAt(i);
char dig = 'A';
switch (cc)
{
case '1' :
dig = '壹';
break;
case '2' :
dig = '贰';
break;
case '3' :
dig = '叁';
break;
case '4' :
dig = '肆';
break;
case '5' :
dig = '伍';
break;
case '6' :
dig = '陆';
break;
case '7' :
dig = '柒';
break;
case '8' :
dig = '捌';
break;
case '9' :
dig = '玖';
break;
case '0' :
dig ='0';
break;
}
if (dig=='A')
return "err";
if (dig!='0')
{
hasN = true;
result += dig;
result += unit1[i];
}
}
if (!hasN)
result += '整';
}
else
{
result += '整';
}
//mirage add end
return result;
}
catch (Exception e)
{
return ("err:"+ e);
}
}
public static String changeMoney(double nMoney) {
NumberFormat f = NumberFormat.getInstance();
f.setMaximumFractionDigits(2);
f.setMinimumFractionDigits(2);
f.setGroupingUsed(false);
return changeMoney(f.format(nMoney));
}
}
将小写金额转换为中文大写金额的类
最新推荐文章于 2022-12-25 20:51:23 发布