5黑马币
package lianxi1;
/**
定义一个常用的工具函数:需将一个浮点数转换成人民币读法字符串。
思路:1、现将这个浮点数转换为整数部分和小数部分并存入字符串数组中。
2、分别对整数和小数部分进行转换。
3、将转换后的两部分字符串连接在一起。
@author 小田
@version 1.0
*/
class Rmb
{
boolean bl=false;
private String [] p={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String [] p1={"拾","佰","仟"};
/**
* 把一个浮点数分成整数部分和小数部分
* @param x 需要分解的浮点数
* @return 分解出来的整数部分和小数部分,字符串数组的第一个元素是整数不封,第二个元素是小数部分
* */
private String [] stringArray(double x)
{
long zheng=(long)x;
long xiao=Math.round((x-zheng)*100);
return new String []{zheng+"",String.valueOf(xiao)};
}
/**
* 将一个浮点数转换成人民币读法字符串
* @param x 需要转换的浮点数
* @return 转换后的人民币读法字符串
* */
public String zhuanHuan(double x)
{
return bianHuan(x);
}
private String bianHuan(double x)
{
String [] m=stringArray(x);
String zheng1=m[0];
String xiao1=m[1];
String rmbzheng=zhengZhuan(zheng1);
String rmbxiao=xiaoZhuan(xiao1);
return rmbzheng+rmbxiao;
}
/**
* 将小数部转化为人民币读法字符串
* @param xiao1 需要转化的小数部分
* @return 转换后的人民币读法字符串
* */
private String xiaoZhuan(String xiao1)
{
String n;
if (xiao1.length()>1)
{
if(xiao1.charAt(0)-48==0)
{
if (xiao1.charAt(1)-48==0)
{
n="零角零分";
}
else
{
n=p[xiao1.charAt(1)-48]+"分";
}
}
else
{
if (xiao1.charAt(1)-48==0)
{
n=p[xiao1.charAt(0)-48]+"角";
}
else
{
n=p[xiao1.charAt(0)-48]+"角"+p[xiao1.charAt(1)-48]+"分";
}
}
}
else
n=p[xiao1.charAt(0)-48]+"分";
if(bl)
{
n= "";
}
return n;
}
private String firstPanDuan(String str)
{
String result="";
result+=p[str.charAt(0)-48]+p1[str.length()-2];
for (int x=1 ;x<str.length() ;x++ )
{
int num1=str.charAt(x)-48;
if (num1!=0&&x!=str.length()-1)
{
result+=p[num1]+p1[str.length()-2-x];
}
else
{
if (x>=2)
{
if (str.charAt(x-1)-48==0 && str.charAt(x)-48==0)
continue;
}
else
{
if (str.charAt(str.length()-1)-48==0)
continue;
}
}
}
return result;
}
private String lastPanDuan(String str2)
{
String result="";
if(str2.charAt(0)-48!=0)
result+=p[str2.charAt(0)-48]+p1[str2.length()-2];
for (int x=1 ;x<str2.length() ;x++ )
{
int num3=str2.charAt(x)-48;
if (num3!=0&&x!=str2.length()-1)
{
result+=p[num3]+p1[str2.length()-2-x];
}
else
{
if (x>=2)
{
if (str2.charAt(x-1)-48==0&&str2.charAt(x)-48==0)
continue;
}
else
{
if (str2.charAt(str2.length()-1)-48==0)
continue;
}
result+=p[num3];
}
}
return result;
}
/**
* 将整数部分转换为人民币读法的字符串
* @param zheng1 需要转换的整数部分
* @return 转换后的整数部分人民币读法字符串。
* */
private String zhengZhuan(String zheng1)
{
if (zheng1.length()>=13)
{
System.out.println("需要转换的浮点数太大,请输入13位以内的浮点数");
bl=true;
}
String result="";
if (zheng1.length()>8&&zheng1.length()<13)
{
String str=zheng1.substring(0,zheng1.length()-8);
result=firstPanDuan(str);
result+="亿";
String str1=zheng1.substring(zheng1.length()-8,zheng1.length()-4);
if(str1.charAt(0)-48!=0)
result+=p[str1.charAt(0)-48]+p1[str1.length()-2];
for (int x=1 ;x<str1.length() ;x++ )
{
int num2=str1.charAt(x)-48;
if (num2!=0&&x!=str1.length()-1)
{
result+=p[num2]+p1[str1.length()-2-x];
}
else
{
if (x>=2)
{
if (str1.charAt(x-1)-48==0&&str1.charAt(x)-48==0)
continue;
}
else
{
if (str1.charAt(str1.length()-1)-48==0)
continue;
}
result+=p[num2];
}
}
if(str1.charAt(0)-48!=0||str1.charAt(1)-48!=0||str1.charAt(2)-48!=0||str1.charAt(3)-48!=0)
result+="万";
String str2=zheng1.substring(zheng1.length()-4,zheng1.length());
result+=lastPanDuan(str2);
result+="元";
}
else if (zheng1.length()>4&&zheng1.length()<9)
{
String str1=zheng1.substring(0,zheng1.length()-4);
result=firstPanDuan(str1);
result+="万";
String str2=zheng1.substring(zheng1.length()-4,zheng1.length());
result+=lastPanDuan(str2);
result+="元";
}
else if (zheng1.length()>0&&zheng1.length()<5)
{
String str2=zheng1.substring(0,zheng1.length());
result=firstPanDuan(str2);
result+="元";
}
return result;
}
public static void main (String [] args)
{
Rmb rb=new Rmb();
System.out.println(rb.zhuanHuan(100000000000.12));
}
}
我用eclipse能运转,用dos能编译,但是运行时报 找不到或无法加载主类 Rmb,在dos里编译和运行其它程序可以(见附图)
|
最佳答案
查看完整内容
是你的包的问题,我放我这边改成了test,可以运行,你运行时有没有加包名???
|