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;
}
}
相关文章推荐
- java正则表达式
- 记录我的java之路
- 第一个JAVA程序解析
- java创建线程的几种方法比较
- 【Java】Java之多线程
- 配置spring 项目时遇到的问题
- java反射机制学习
- java 实现RSA实现数据的私钥加密以及公钥解密
- 定时任务实现Timer, TimeTask, ScheduledExecutorService及Spring定时器
- JAVA去掉一个字符串的前后空格
- JAVA将一个字符串反向颠倒
- Java计算一个字符在另一个字符串出现的次数
- 在java中高效复制一个文件夹里面所有的内容
- javaWEB实现相册管理的简单功能
- 简单了解Java编程中线程的创建与守护线程
- You must restart adb and Eclipse的情况之一
- Spring框架的测试和ClassPathXmlApplicationContext类的简单使用
- java 变量创建后在内存中的存储关系+空指针异常机理+图文解释
- spring and Mockito
- JAVA类的继承,封装,多态,以及接口的一些信息