您的位置:首页 > 编程语言 > Java开发

Java 货币金额大写格式

2015-11-21 10:48 405 查看


/*

 * 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

); //因为是反转,所以单位在前;

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

);

}

num = temp.toString();

return num;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: