关闭

Java 货币金额大写格式

213人阅读 评论(0) 收藏 举报
分类:

/*
 * 1.将数字格式化,如果有小数,留3位到厘;
 * 2、分别将整数和小数部分转换为大写方式,并插入单位;
 * 3、组合整数和小数部分;
 */
public class ConvertMoney 
{
private static final Object[] STR_UNIT1 = {"", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
private static final Object[] STR_NUMBER = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
private static final Object[] STR_UNIT2 = {"角", "分","厘"};

public static void main(String[] args) 
{
Scanner scan = new Scanner(System.in);
System.out.println("请输入金额:");//从控制端输入;
String convert = convert(scan.nextDouble());   //获取金额转换后的字符串;
System.out.println(convert);   //输出字符串;
}
    
//用于大写金额格式的转换;
private static String convert(double d) 
DecimalFormat df = new DecimalFormat("#0.###"); //实例化DecimalFormat对象;
String strNum = df.format(d);                    //格式化double数字;
String point = "";
if(strNum.indexOf(".") != -1)  //有小数部分的话,整数部分就以元结尾;
{
point = "元";
}
else//否则以元整结尾;
{
point = "元整";
} 
if(strNum.indexOf(".") != -1) //有小数点时调用getInteger()和getDecimal();
{
String num = strNum.substring(0, strNum.indexOf("."));   //截取整数部分;
if(num.length() > 12)
{
System.out.println("数字大于12位,不能完成转换!");
return "";
}
String result = getInteger(num) + point + getDecimal(strNum);
return result;
}
else      //没有小数点时,只要调用getInteger();
{
if(strNum.length() > 12)
{
System.out.println("数字大于12位,不能完成转换!");
return "";
}
String result = getInteger(strNum) + point;
return result;
}
}

/*
* 转换整数部分,先判断是否包含小数,然后把数字转换为字符串
* 并反转字符顺序(方便大写与单位的对应),为每个数字添加对应的大写单位;
*/
private static String getInteger(String num) 
{
num = new StringBuffer(num).reverse().toString();    //反转字符串;
StringBuffer temp = new StringBuffer();//实例化StringBuffer;
for(int i=0; i<num.length(); i++)
{
temp.append(STR_UNIT1[i]); //因为是反转,所以单位在前;
temp.append(STR_NUMBER[num.charAt(i)-48]);
}
temp.append("¥");
num = temp.reverse().toString(); //反转字符串;
return num; 
}

/*
* 截取小数部分,转换成大写格式;
*/
private static String getDecimal(String num) 
{
num = num.substring(num.indexOf(".")+1, num.length());       //截取小数部分;
StringBuffer temp = new StringBuffer();  //实例化StringBuffer;
for(int i=0; i<num.length(); i++)
{
temp.append(STR_NUMBER[num.charAt(i)-48]);
temp.append(STR_UNIT2[i]);
}
num = temp.toString();
return num;
}
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:110941次
    • 积分:2524
    • 等级:
    • 排名:第15176名
    • 原创:142篇
    • 转载:44篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论