任意输入数字:假如输入1234 输出 : 壹千贰百叁拾肆元整 我是一位java初学者希望各位前辈指点一下:假如输入1234 输出 : 壹千贰百叁拾肆元整 网上我查了一下有这种题目可惜没有注释。有些循环体中用的变量不明白还有如何判断当输入5或者6位数或者更多的时候,输出是拾万或者万希望高位高手能解释一下。最好能有源玛。呵呵谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class changeToBig { public changeToBig() { } public String hangeToBig(double value){ char[] hunit={'拾','佰','仟'}; //段内位置表示 char[] vunit={'万','亿'}; //段名表示 char[] digit={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; //数字表示 long midVal = (long)(value*100); //转化成整形 String valStr=String.valueOf(midVal); //转化成字符串 String head=valStr.substring(0,valStr.length()-2); //取整数部分 String rail=valStr.substring(valStr.length()-2); //取小数部分 String prefix=""; //整数部分转化的结果 String suffix=""; //小数部分转化的结果 //处理小数点后面的数 if(rail.equals("00")){ //如果小数部分为0 suffix="整"; } else{ suffix=digit[rail.charAt(0)-'0']+"角"+digit[rail.charAt(1)-'0']+"分"; //否则把角分转化出来 } //处理小数点前面的数 char[] chDig=head.toCharArray(); //把整数部分转化成字符数组 char zero='0'; //标志'0'表示出现过0 byte zeroSerNum = 0; //连续出现0的次数 for(int i=0;i<chDig.length;i++){ //循环处理每个数字 int idx=(chDig.length-i-1)%4; //取段内位置 int vidx=(chDig.length-i-1)/4; //取段位置 if(chDig[i]=='0'){ //如果当前字符是0 zeroSerNum++; //连续0次数递增 if(zero == '0'){ //标志 zero=digit[0]; } else if(idx==0 && vidx >0 &&zeroSerNum < 4){ prefix += vunit[vidx-1]; zero='0'; } continue; } zeroSerNum = 0; //连续0次数清零 if(zero != '0') { //如果标志不为0,则加上,例如万,亿什么的 prefix+=zero; zero='0'; } prefix+=digit[chDig[i]-'0']; //转化该数字表示 if(idx > 0) prefix += hunit[idx-1]; if(idx==0 && vidx>0){ prefix+=vunit[vidx-1]; //段结束位置应该加上段名如万,亿 } } if(prefix.length() > 0) prefix += '圆'; //如果整数部分存在,则有圆的字样 return prefix+suffix; //返回正确表示 } public static void main(String args[]){ changeToBig a=new changeToBig(); System.out.print(a.hangeToBig(876543210000.12)); } } 最大支持千亿 求Hibernate验证用户登录方法 求 RSA 工具类。提供加密,解密,生成密钥对等方法,实现代码 求解:IO,NIO,SOCKET,MINA迷糊中!!! 怎么实现得到指定Oracle数据库的结构信息? 大家看看程序错在哪儿? 多态问题帮我看看看谢谢 ,有2段输出结果不理解 究竟哪一句正确 QUEUE是指队列,那么请问TOPIC指的是什么意思?急!!!在线等待!! 有关STATIC的问题 求一个我类似于windows里面的日期时间 jar 菜鸟纹问题:关于线程同步问题(见代码) 我是否应该熟悉java.swing或者java.awt这些包
public changeToBig() {
}
public String hangeToBig(double value){
char[] hunit={'拾','佰','仟'}; //段内位置表示
char[] vunit={'万','亿'}; //段名表示
char[] digit={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; //数字表示
long midVal = (long)(value*100); //转化成整形
String valStr=String.valueOf(midVal); //转化成字符串
String head=valStr.substring(0,valStr.length()-2); //取整数部分
String rail=valStr.substring(valStr.length()-2); //取小数部分
String prefix=""; //整数部分转化的结果
String suffix=""; //小数部分转化的结果
//处理小数点后面的数
if(rail.equals("00")){ //如果小数部分为0
suffix="整";
} else{
suffix=digit[rail.charAt(0)-'0']+"角"+digit[rail.charAt(1)-'0']+"分"; //否则把角分转化出来
}
//处理小数点前面的数
char[] chDig=head.toCharArray(); //把整数部分转化成字符数组
char zero='0'; //标志'0'表示出现过0
byte zeroSerNum = 0; //连续出现0的次数
for(int i=0;i<chDig.length;i++){ //循环处理每个数字
int idx=(chDig.length-i-1)%4; //取段内位置
int vidx=(chDig.length-i-1)/4; //取段位置
if(chDig[i]=='0'){ //如果当前字符是0
zeroSerNum++; //连续0次数递增
if(zero == '0'){ //标志
zero=digit[0];
} else if(idx==0 && vidx >0 &&zeroSerNum < 4){
prefix += vunit[vidx-1];
zero='0';
}
continue;
}
zeroSerNum = 0; //连续0次数清零
if(zero != '0') { //如果标志不为0,则加上,例如万,亿什么的
prefix+=zero;
zero='0';
}
prefix+=digit[chDig[i]-'0']; //转化该数字表示
if(idx > 0) prefix += hunit[idx-1];
if(idx==0 && vidx>0){
prefix+=vunit[vidx-1]; //段结束位置应该加上段名如万,亿
}
}
if(prefix.length() > 0) prefix += '圆'; //如果整数部分存在,则有圆的字样
return prefix+suffix; //返回正确表示
}
public static void main(String args[]){
changeToBig a=new changeToBig();
System.out.print(a.hangeToBig(876543210000.12));
}
}
最大支持千亿