差不多这个样子的,3位数,只写了整数部分,没解决0的话省略“十”的问题,反正差不多这个意思啦。class Alpha2Chinese { public char Number2Chn(int SingleNumber){ char Chn; switch (SingleNumber) { case 1: Chn='一';break; case 2: Chn='二';break; case 3: Chn='三';break; case 4: Chn='四';break; case 5: Chn='五';break; case 6: Chn='六';break; case 7: Chn='七';break; case 8: Chn='八';break; case 9: Chn='九';break; case 0: Chn='零';break; default: Chn='错';break; } return Chn; } public void ScreenOut(int InputNumber){ System.out.println(Number2Chn(InputNumber/100)+"十"); if (InputNumber>999) { System.out.println("Sorry, your input is unlegal"); } else if (InputNumber>99) { System.out.println(Number2Chn(InputNumber/100)+"百" +Number2Chn((InputNumber%100)/10)+"十" +Number2Chn(InputNumber%10)); } else if (InputNumber>9) { System.out.println(Number2Chn((InputNumber%100)/10)+"十" +Number2Chn(InputNumber%10)); } else { System.out.println(Number2Chn(InputNumber)); } } public static void main(String[] args) { Alpha2Chinese AC = new Alpha2Chinese(); AC.ScreenOut(108); } }
<script language="javaScript">
function convert(str){
if(str==""){
alert("请输入金额!");form1.money.focus();return;
}
if(isNaN(str)){
alert("您输入的金额不合法!");return;
}
if(str>999999999999){
alert("您输入的金额不能大于999999999999!");return;
}
//将小数点后保留两位小数
/*
if(str.indexOf(".")>0){
var decimal=str.length-str.indexOf(".")-1;
if(decimal>2){
str=str.substr(0,str.length+2-decimal);
}
}*/
value=change(str); //调用自定义函数转换
form1.moneyok.value=value; //将转换后的值赋给"转换后的大写金额"文本框
}
function change(str){
je="零壹贰叁肆伍陆柒捌玖";
cdw="万仟佰拾亿仟佰拾万仟佰拾元角分";
var newstring=(parseInt(str*100)).toString();
newstringlog=newstring.length;
newdw=cdw.substr(cdw.length-newstringlog);
num0=0; //记录零的个数
wan=0; //记录万位出现的次数
dxje=""; //记录大写金额
for(m=1;m<newstringlog+1;m++){
xzf=newstring.substr(m-1,1); //取得该位数
dzf=je.substr(xzf,1); //结果(大写的零-玖)
dw=newdw.substr(m-1,1); //位大写
if(dzf=="零"){
dzf="";
if(dw=="亿"){
}else if(dw=="万"){
dzf="";
wan=1;
}else if(dw=="元"){ }else{
dw=""; //记录单位
}
num0=num0+1;
}else{
if(num0-wan>0){
if(dw!="角"){
dzf="零"+dzf;
}
}
num0=0;
}
dxje=dxje+dzf+dw;
}
if(newstring.length!=1){
if(newstring.substr(newstring.length-2)=="00"){
dxje=dxje+"整";
}else{
dxje=dxje;
}
}
return dxje;
}
</script>
就是用数组分拆,转换就OK了。貌似就是一楼那样,用什么语言实现都可以。
把1--9放到HashMap里。
循环截取 输入的字符,从0位开始到最后。
然后把 值从map里匹配出来。
然后循环拼成中文串就好了。
我还是建议楼主,自己能思考思考,方法有很多。
我这个就当做抛砖引玉了。
1)将105.00(****.**)乘以100
2)强制转换成整型
3)求余10 取到最低位,用变量保存(如:存到X中)
4)除以10,去掉最低位 做成循环 直到除尽
5)创建一个输出汉字的类
用switch(X)来做
{
public char Number2Chn(int SingleNumber){
char Chn;
switch (SingleNumber)
{
case 1: Chn='一';break;
case 2: Chn='二';break;
case 3: Chn='三';break;
case 4: Chn='四';break;
case 5: Chn='五';break;
case 6: Chn='六';break;
case 7: Chn='七';break;
case 8: Chn='八';break;
case 9: Chn='九';break;
case 0: Chn='零';break;
default: Chn='错';break;
}
return Chn;
} public void ScreenOut(int InputNumber){
System.out.println(Number2Chn(InputNumber/100)+"十");
if (InputNumber>999)
{
System.out.println("Sorry, your input is unlegal");
}
else if (InputNumber>99)
{
System.out.println(Number2Chn(InputNumber/100)+"百"
+Number2Chn((InputNumber%100)/10)+"十"
+Number2Chn(InputNumber%10));
}
else if (InputNumber>9)
{
System.out.println(Number2Chn((InputNumber%100)/10)+"十"
+Number2Chn(InputNumber%10));
}
else
{
System.out.println(Number2Chn(InputNumber));
}
} public static void main(String[] args)
{
Alpha2Chinese AC = new Alpha2Chinese();
AC.ScreenOut(108);
}
}
private static final String chs[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };
/** *//**
*
* @param money 金额数字串
* @return 金额中文大写
* 将输入数字串money分割成4位数,将四位数转换成金额大写后再加上单位("","万","亿")
*/
public static String numToRMB(String money) {
StringBuilder chRMB = new StringBuilder();
money=money.replaceAll("[,,]", "");//去除分隔符逗号
try {
double t = Double.parseDouble(money);
if (t < 0) {
System.out.println("金额不能是负的!");
throw new IllegalArgumentException("金额不能是负的!");
//return null;
}
} catch (NumberFormatException e) {
System.out.println("输入数据有误,请检查!");
throw new IllegalArgumentException("输入数据有误,请检查!");
//return null;
}
int dotPos = money.indexOf('.');
String strz;//截取整数部分
if(dotPos==-1) {
strz=money;
}
else {
strz=money.substring(0, dotPos);//整数部分
}
StringBuilder sb=new StringBuilder(strz);
while(sb.length()>=1&&sb.charAt(0)=='0') {// 去掉数前面多余的零
sb.deleteCharAt(0);
}
if(sb.length()==0) {//输入为‘0 0’的情况
return "零";
}
strz=sb.toString();
String cur="";
boolean zero=false;//记录是否应该加‘零’如 1,0000,0000,0001,读作 壹万亿零壹圆整
String temp;
String digits;//每次截取的最后四位数
while(strz.length()>0) {
if(strz.length()>=4) {
digits=strz.substring(strz.length()-4);
strz=strz.substring(0, strz.length()-4);
}
else {
digits=strz;
strz="";
}
temp=fourMaxChange(digits);
if(temp.equals("零")) {
if(cur.equals("亿")) {
chRMB.insert(0, "亿");
}
if (zero == true) {
if (!chRMB.substring(0, 1).equals("零"))
chRMB.insert(0, "零");
zero = false;
}
}
else {
temp += cur;
chRMB.insert(0, temp);
if (digits.charAt(0) == '0')
if (chRMB.length() >=1
&& !chRMB.substring(0, 1).equals("零"))
chRMB.insert(0, "零");
zero = true;
}
if(cur.equals("")) {//改变单位
cur="万";
}
else if(cur.equals("亿")) {
cur="万";
}
else cur="亿";
}
String strx;
if(dotPos!=-1) {//有小数
strx = money.substring(dotPos+1);
if (strx.length() > 2) {
System.out.println("金额只允许两位小数!");
throw new IllegalArgumentException("金额只允许两位小数!");
//return null;
}
int xiaoshu = Integer.parseInt(strx);//小数部分
if(xiaoshu==0||strx.length()==0) {
chRMB.append("圆整");//整
}
else
chRMB.append("圆");
if(strx.length()==1) {
chRMB.append(chs[xiaoshu]).append("分");
}
else {
if(xiaoshu/10!=0) {
chRMB.append(chs[xiaoshu/10]).append("角");
}
else {
chRMB.append("零");
}
if(xiaoshu%10!=0) {
chRMB.append(chs[xiaoshu%10]).append("分");
}
}
}
else {
chRMB.append("圆整");
}
return chRMB.toString();
}
/** *//**
*
* @param number 输入数字串
* @return 转换后的大写金额
* @throws NumberFormatException 不合法的数字
* 将最多四位整数转换成大写金额
*/
public static String fourMaxChange(String number)
throws NumberFormatException {// 将最多四位整数转换成大写金额
StringBuilder rs = new StringBuilder();
int money;
money = Integer.parseInt(number);
boolean zero = false;
if (money / 1000 != 0) {
zero = true;
rs.append(chs[money / 1000]).append("仟");
money %= 1000;
}
if (money / 100 != 0) {
zero = true;
rs.append(chs[money / 100]).append("佰");
money %= 100;
} else if (zero == true) {
rs.append(chs[0]);// 零
money %= 100;
}
if (money / 10 != 0) {
zero = true;
rs.append(chs[money / 10]).append("拾");
money %= 10;
} else if (zero == true && !rs.substring(rs.length() - 1).equals("零")) {
rs.append(chs[0]);// 零
money %= 10;
}
if (money != 0) {
zero = true;
rs.append(chs[money]);
} else if (zero == true && rs.substring(rs.length() - 1).equals("零")) {
rs.delete(rs.length() - 1, rs.length());
}
if (zero == true)
return rs.toString();
else
return chs[0];//零
}
public static void main(String[] args) {
System.out.println(numToRMB("12,0000,0000,0403,0012,0000.02"));
}
}