黑马程序员技术交流社区
标题:
将一个浮点数转换成人民币读法字符串。
[打印本页]
作者:
1017161726
时间:
2015-5-1 17:37
标题:
将一个浮点数转换成人民币读法字符串。
/*分析:
输入一个double数值。自带两位小数的。数值小于10^13。
把这个数值字符串切割成整数部分和小数部分。
小数部分判断几角几分,或者为零时输出“整”。
整数部分每后四位分成一个子字符串,然后对每个子字符串的读法进行判断。
如果超过一万,就分割成一万以上和一万以下的部分,分开读,一万以上的在读法上加“万”。
连起来就是整个RMB的读法。
*/
class Demo
{
private static String [] shu={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","整"};
private static String [] wei={"元","拾","佰","仟","万","亿","角","分"}; //数字只到亿单位。
public static void main(String [] args)
{
double rmb=1234567.89; //输入的数要保证只有两位小数。
String s=transform(rmb);
System.out.println(s);
}
public static String transform(double d)
{
String rmb=Double.toString(d); //转成字符串。
int i=rmb.indexOf('.');
String xiao=rmb.substring(i+1); //取小数部分。
String zheng=rmb.substring(0,i); //取整数部分。
String s1=readZ(zheng);
String s2=readX(xiao);
System.out.println(xiao);
return s1+s2;
}
private static String read(String s) //这里传入的数最多是4位数。
{
int n=Integer.parseInt(s);
int ge,shi,bai,qian;
String read="";
if ((qian=n/1000%10)!=0)
read=shu[qian]+wei[3];
if ((bai=n/100%10)!=0)
read+=shu[bai]+wei[2];
if ((shi=n/10%10)!=0)
read+=shu[shi]+wei[1];
if ((ge=n%10)!=0)
read+=shu[ge];
return read;
}
private static String readZ(String zheng)
{
String read="";
int L=zheng.length();
if (L<=4)
read=read(zheng)+wei[0];
else if (L<=8)
{
String s1=zheng.substring(0,L-4);
String s2=zheng.substring(L-4);
read=read(s1)+wei[4]+read(s2)+wei[0];
}
else if (L<=12)
{
String s1=zheng.substring(0,L-8);
String s2=zheng.substring(L-8,L-4);
String s3=zheng.substring(L-4);
read=read(s1)+wei[5]+read(s2)+wei[4]+read(s3)+wei[0];
}
else
{
return "【数值太大!】";
}
return read;
}
private static String readX(String xiao)
{
int n=Integer.parseInt(xiao);
String str="";
if(n==0)
return shu[11]; //返回"整"。
else
{
if (n/10!=0)
str+=shu[n/10]+wei[6]; //返回 Y 角。
if (n%10!=0)
str+=shu[n%10]+wei[7]; //返回 Y 分。
}
return str;
}
}
复制代码
有不精简的或者错误的地方请多多指正。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2