public void changeNumToString(double num){ double n = num; String out = ""; int wan = 0; if(n>10000){ //如果输入的数字大于10000 wan = (int) (n/10000); // wan保存万位以上的数字 if(wan > 10000){ //判断输入的数字是否为亿以上的 //方法都一样,这里没有再写 }else{ //对万位以上的进行排版 out += method1(wan); out += str[4];
//对万位以下的进行排版 int n1 = (int) n%10000; out += method1(n1) + "元"; //对小数位进行排版 double n2 = n%1; if(n2>0){ out += method2(n2); }else{ out += "整"; } } }else{ //如果输入的数小于10000 int n1 = (int) n; out += method1(n1) + "元";
//对是否有小数后面的位进行判断 double n2 = n%1; if(n2>0){ out += method2(n2); }else{ out += "整"; } } System.out.println(out); }
public String method1(int n){ String out = ""; int length = new Integer(n).toString().length(); int weiNum1 = n; int weiNum = 0; //保存每位上的数字 for(int i = length;i>0;i--){ weiNum = (int) (weiNum1/Math.pow(10,i-1)); //获得最高位上的数字 out += str1[weiNum-1] + str[i-1]; weiNum1 = (int) (weiNum1%Math.pow(10,i-1)); //将数更新,及去掉最高位 } return out; }
public String method2(double n){ String out = ""; int weiNum = 0; double weiNum1 = n; for(int i=1;i<=2;i++){ weiNum = (int) (weiNum1*Math.pow(10,1)); //获得离小数点最近位的数字 out += str1[weiNum-1]+str2[i-1]; weiNum1 = weiNum1*Math.pow(10,i)%1; //将数更新,去掉离小数点最近的,并把后面的向前提一位 } return out; }
public static void main(String[] args) { // TODO Auto-generated method stub Test_num tn = new Test_num(); //两个测试例子 分别是大于10000的和小于10000的 tn.changeNumToString(12345.32); tn.changeNumToString(123.12); }}
public void changeNumToString(double num){ double n = num; String out = ""; int wan = 0; if(n>10000){ //如果输入的数字大于10000 wan = (int) (n/10000); // wan保存万位以上的数字 if(wan > 10000){ //判断输入的数字是否为亿以上的 //方法都一样,这里没有再写 }else{ out += method1(wan); //对万位以上的进行排版 out += str[4]; //在输入中加上 万
out += method3(n%10000);//对万位以下的进行排版 } }else{ //如果输入的数小于10000 if(num>1){ //如果输入的数是大于1的数 out += method3(n); }else{ //如果输入的只是小数 out += method2(num); } } System.out.println(out); }
public String method1(int n){ String out = ""; int length = new Integer(n).toString().length(); int weiNum1 = n; int weiNum = 0; //保存每位上的数字 for(int i = length;i>0;i--){ weiNum = (int) (weiNum1/Math.pow(10,i-1)); //获得最高位上的数字 out += str1[weiNum-1] + str[i-1]; weiNum1 = (int) (weiNum1%Math.pow(10,i-1)); //将数更新,及去掉最高位 } return out; }
public String method2(double n){ String out = ""; int weiNum = 0; double weiNum1 = n; for(int i=1;i<=2;i++){ weiNum = (int) (weiNum1*Math.pow(10,1)); //获得离小数点最近位的数字 out += str1[weiNum-1]+str2[i-1]; weiNum1 = weiNum1*Math.pow(10,i)%1; //将数更新,去掉离小数点最近的,并把后面的向前提一位 } return out; }
public String method3(double n){ String out=""; int n1 = (int) n; out += method1(n1) + "元"; //对是否有小数后面的位进行判断 double n2 = n%1; if(n2>0){ out += method2(n2); }else{ out += "整"; } return out; }
public static void main(String[] args) { // TODO Auto-generated method stub Test_num tn = new Test_num(); //两个测试例子 分别是大于10000的和小于10000的 tn.changeNumToString(12345.32); tn.changeNumToString(0.12); }}
public class Test_num { /**
* @param args
*/
private String[] str = {"","十","百","千","万"}; //小数以前的位
private String[] str1 = {"一","二","三","四","五","六","七","八","九"}; //中文数字,没有改成大写的
private String[] str2 = {"角","分"}; //小数的位
public void changeNumToString(double num){
double n = num;
String out = "";
int wan = 0;
if(n>10000){ //如果输入的数字大于10000
wan = (int) (n/10000); // wan保存万位以上的数字
if(wan > 10000){ //判断输入的数字是否为亿以上的
//方法都一样,这里没有再写
}else{
//对万位以上的进行排版
out += method1(wan);
out += str[4];
//对万位以下的进行排版
int n1 = (int) n%10000;
out += method1(n1) + "元";
//对小数位进行排版
double n2 = n%1;
if(n2>0){
out += method2(n2);
}else{
out += "整";
}
}
}else{ //如果输入的数小于10000
int n1 = (int) n;
out += method1(n1) + "元";
//对是否有小数后面的位进行判断
double n2 = n%1;
if(n2>0){
out += method2(n2);
}else{
out += "整";
}
}
System.out.println(out);
}
public String method1(int n){
String out = "";
int length = new Integer(n).toString().length();
int weiNum1 = n;
int weiNum = 0; //保存每位上的数字
for(int i = length;i>0;i--){
weiNum = (int) (weiNum1/Math.pow(10,i-1)); //获得最高位上的数字
out += str1[weiNum-1] + str[i-1];
weiNum1 = (int) (weiNum1%Math.pow(10,i-1)); //将数更新,及去掉最高位
}
return out;
}
public String method2(double n){
String out = "";
int weiNum = 0;
double weiNum1 = n;
for(int i=1;i<=2;i++){
weiNum = (int) (weiNum1*Math.pow(10,1)); //获得离小数点最近位的数字
out += str1[weiNum-1]+str2[i-1];
weiNum1 = weiNum1*Math.pow(10,i)%1; //将数更新,去掉离小数点最近的,并把后面的向前提一位
}
return out;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test_num tn = new Test_num();
//两个测试例子 分别是大于10000的和小于10000的
tn.changeNumToString(12345.32);
tn.changeNumToString(123.12);
}}
public class Test_num { /**
* @param args
*/
private String[] str = {"","十","百","千","万"}; //小数以前的位
private String[] str1 = {"一","二","三","四","五","六","七","八","九"}; //中文数字,没有改成大写的
private String[] str2 = {"角","分"}; //小数的位
public void changeNumToString(double num){
double n = num;
String out = "";
int wan = 0;
if(n>10000){ //如果输入的数字大于10000
wan = (int) (n/10000); // wan保存万位以上的数字
if(wan > 10000){ //判断输入的数字是否为亿以上的
//方法都一样,这里没有再写
}else{
out += method1(wan); //对万位以上的进行排版
out += str[4]; //在输入中加上 万
out += method3(n%10000);//对万位以下的进行排版
}
}else{ //如果输入的数小于10000
if(num>1){ //如果输入的数是大于1的数
out += method3(n);
}else{ //如果输入的只是小数
out += method2(num);
}
}
System.out.println(out);
}
public String method1(int n){
String out = "";
int length = new Integer(n).toString().length();
int weiNum1 = n;
int weiNum = 0; //保存每位上的数字
for(int i = length;i>0;i--){
weiNum = (int) (weiNum1/Math.pow(10,i-1)); //获得最高位上的数字
out += str1[weiNum-1] + str[i-1];
weiNum1 = (int) (weiNum1%Math.pow(10,i-1)); //将数更新,及去掉最高位
}
return out;
}
public String method2(double n){
String out = "";
int weiNum = 0;
double weiNum1 = n;
for(int i=1;i<=2;i++){
weiNum = (int) (weiNum1*Math.pow(10,1)); //获得离小数点最近位的数字
out += str1[weiNum-1]+str2[i-1];
weiNum1 = weiNum1*Math.pow(10,i)%1; //将数更新,去掉离小数点最近的,并把后面的向前提一位
}
return out;
}
public String method3(double n){
String out="";
int n1 = (int) n;
out += method1(n1) + "元";
//对是否有小数后面的位进行判断
double n2 = n%1;
if(n2>0){
out += method2(n2);
}else{
out += "整";
}
return out;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test_num tn = new Test_num();
//两个测试例子 分别是大于10000的和小于10000的
tn.changeNumToString(12345.32);
tn.changeNumToString(0.12);
}}
好与不好自己参考!数组单位 {"","十","百","千","万","十","百","千","亿"}数组数字{一,弍,}
{
n = 12345.23
写一个方法取得(n/1)+"".toString()的位数-1(减一);(作为数组单位索引 index)
同时n=n%Math(10,index),n作为数字数组的索引
}
以上为循环,这样整数部分就完事了小数部分就按上面的来就行
public class NumChangeToCH {
//chUnit:格式化中文数字数组
private static final char[] CHUNIT =
{'個','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万'};
private static final String STRNUM = "0123456789";
private static final char[] CHNUM = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
//将长整数变成中文数字
public static String longToCH(long num){
//定义一个字符序列保存中文数字的字符序列
StringBuilder numStr = new StringBuilder();
if(num<0){
num = -num;
numStr.append('负');
}
//将整数换成字符序列
StringBuilder numTemp = new StringBuilder(new Long(num).toString());
int len = numTemp.length();
//将字符序列反转后换成字符数组
char[] chArr = numTemp.reverse().toString().toCharArray();
//将字符数组的每个数字替换成中文,同chUnit依次加入字符序列
while(len-->0){
numStr.append(CHNUM[STRNUM.indexOf(chArr[len])]);
numStr.append(CHUNIT[len]);
}
return new String(numStr);
}
public static String moneyToCH(double money){
String mon = new DecimalFormat(".00").format(money);
String[] numArr = mon.split("\\.");
//将整数部分得到,并把最后一个字符替换成"圆"
mon = NumChangeToCH.longToCH(Long.parseLong(numArr[0]));
mon = mon.substring(0, mon.length()-1) + "圆";
//将小数部分换成角和分
if(numArr.length>1){
char[] dec = numArr[1].toCharArray();
mon += CHNUM[STRNUM.indexOf(dec[0])] + "角";
mon += CHNUM[STRNUM.indexOf(dec[1])] + "分";
}
return mon;
}
public static void main(String[] args) {
System.out.println(NumChangeToCH.moneyToCH(1110012345.2));
}
}
不知道会不会太乱……
可以换算到万亿,如不够只需修改CHUNIT就可扩展。