字符串转换为货币金额大写格式,请大家指教一下

「已注销」 2015-09-06 04:26:05

import java.text.DecimalFormat;
import java.util.Scanner;

public class Test080{
private final static String[] STR_NUMBER={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private final static String[] STR_UNIT={"","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"};
private final static String[] STR_UNIT2={"厘","分","角"};

public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
System.out.println("请输入一个金额:");
String convert=convert(in.nextDouble());
System.out.println(convert);
}

public static String getInteger(String num)
{
if(num.indexOf(".")!=-1)
{
num=num.substring(0,num.indexOf("."));
}
num=new StringBuffer(num).reverse().toString();
StringBuffer temp=new StringBuffer();
for(int i=0;i<num.length();i++)
{
temp.append(STR_UNIT[i]);
temp.append(STR_NUMBER[num.charAt(i)-48]);
}
num=temp.reverse().toString();
num = numReplace(num, "零拾", "零");
num = numReplace(num, "零佰", "零");
num = numReplace(num, "零仟", "零");
num = numReplace(num, "零万", "万");
num = numReplace(num, "零亿", "亿");
num = numReplace(num, "零零", "零");
num = numReplace(num, "亿万", "亿");
if(num.lastIndexOf("零")==num.length()-1)
{
num=num.substring(0,num.length()-1);
}
return num;
}

public static String getDecimal(String num)
{
if(num.indexOf(".")==-1)
{
return "";
}
num=num.substring(num.indexOf(".")+1);
num=new StringBuffer(num).reverse().toString();
StringBuffer temp=new StringBuffer();
for(int i=0;i<num.length();i++)
{
temp.append(STR_UNIT2[i]);
temp.append(STR_NUMBER[num.charAt(i)-48]);
}
num=temp.reverse().toString();
num = numReplace(num, "零角", "零");
num = numReplace(num, "零分", "零");
num = numReplace(num, "零厘", "零");
num = numReplace(num, "零零", "零");

if(num.lastIndexOf("零")==num.length()-1)
{
num=num.substring(0,num.length()-1);
}
return num;
}

public static String numReplace(String num,String oldStr,String newStr)
{
while(true)
{
if(num.indexOf(oldStr)==-1)
{
break;
}
num=num.replaceAll(oldStr, newStr);
}
return num;
}

public static String convert(double d)
{
DecimalFormat df=new DecimalFormat("#0.###");
String strNum=df.format(d);
if(strNum.indexOf(".")!=-1)
{
String num=strNum.substring(0,strNum.indexOf("."));
if(num.length()>12)
{
System.out.println("数字太大,不能完成转换");
return "";
}
}
String point="";
if(strNum.indexOf(".")!=-1)
{
point="元";
}
else
{
point="元整";
}

String result=getInteger(strNum)+point+getDecimal(strNum);
if(result.startsWith("元"))
{
result=result.substring(1,result.length());
}
return result;
}
}

在代码中,temp.append(STR_NUMBER[num.charAt(i)-48]),索引为什么要减去48,不减的话,运行会报错。
...全文
56 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
gukuitian 2015-09-06
  • 打赏
  • 举报
回复
0--9的ascii为 48--57 这里减48就是把字符转换成对应的索引位

50,706

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧