题目:读入一个浮点数值,将其转换为中文金额的大写形式.如123.45,转化为壹佰贰拾叁元肆角伍分.编写程序,针对一下情况完善.
1.当金额为整数时,只表示整数部分,省略小数部分.并添加“整”字.如123,转化为壹佰贰拾叁元整.
2.当金额中含有连续的0时,只需输出一个零.如10005表示为壹万零伍元整我的程序如下:
public class MoneyB
{
public static void main(String[] args)
{
double k=10030501.98;
int n=0;int t=0;
double m;
for(int zero=100000000;zero>1;zero/=10)
{ //if((k<10)&&(zero>1))zero=1;
m=(k/zero);
int c=(int)(m);
if(((c==0)&&(n==0))||((c==0)&&(t==1)))continue;//防止开始输出0和连续输出0
else {k-=c*zero;n=1;}
switch(c)
{
case 1: System.out.print("壹");break;
case 2: System.out.print("贰");break;
case 3: System.out.print("叁");break;
case 4: System.out.print("肆");break;
case 5: System.out.print("伍");break;
case 6: System.out.print("陆");break;
case 7: System.out.print("柒");break;
case 8: System.out.print("捌");break;
case 9: System.out.print("玖");break;
case 0: System.out.print("零");break;
}
if(c==0){t=1;continue;}//防止输出连续0
else t=0;
switch(zero)
{
case 100000000: System.out.print("亿");break;
case 10000000: System.out.print("仟萬");break;
case 1000000: System.out.print("佰萬");break;
case 100000: System.out.print("十萬");break;
case 10000: System.out.print("萬");break;
case 1000: System.out.print("仟");break;
case 100: System.out.print("佰");break;
case 10: System.out.print("拾");break;
case 1: System.out.print("圆");break;
}
if((m*zero/c)%zero==0){System.out.print("整");break;}
else if(zero==1)
{
k*=100;
int p=0;
for(int i=10;i>0;i/=10)
{
p=(int)(k/i);
if(p<1)continue;
switch(p)
{
case 1: System.out.print("壹");break;
case 2: System.out.print("贰");break;
case 3: System.out.print("叁");break;
case 4: System.out.print("肆");break;
case 5: System.out.print("伍");break;
case 6: System.out.print("陆");break;
case 7: System.out.print("柒");break;
case 8: System.out.print("捌");break;
case 9: System.out.print("玖");break;
case 0: System.out.print("零");break;
}
switch(i)
{
case 10: System.out.print("角"); break;
case 1: System.out.print("分"); break;
}
k%=10;
}
}
}
}
}
当k=1234567.98时.输出壹佰萬贰十萬叁萬肆仟伍佰陆拾
当k=10030500壹仟萬零叁萬零伍佰整
当k=10030501壹仟萬零叁萬零伍佰零
大家帮忙看下问题在哪里.或者有更简单的方法也行.先谢谢了.
1.当金额为整数时,只表示整数部分,省略小数部分.并添加“整”字.如123,转化为壹佰贰拾叁元整.
2.当金额中含有连续的0时,只需输出一个零.如10005表示为壹万零伍元整我的程序如下:
public class MoneyB
{
public static void main(String[] args)
{
double k=10030501.98;
int n=0;int t=0;
double m;
for(int zero=100000000;zero>1;zero/=10)
{ //if((k<10)&&(zero>1))zero=1;
m=(k/zero);
int c=(int)(m);
if(((c==0)&&(n==0))||((c==0)&&(t==1)))continue;//防止开始输出0和连续输出0
else {k-=c*zero;n=1;}
switch(c)
{
case 1: System.out.print("壹");break;
case 2: System.out.print("贰");break;
case 3: System.out.print("叁");break;
case 4: System.out.print("肆");break;
case 5: System.out.print("伍");break;
case 6: System.out.print("陆");break;
case 7: System.out.print("柒");break;
case 8: System.out.print("捌");break;
case 9: System.out.print("玖");break;
case 0: System.out.print("零");break;
}
if(c==0){t=1;continue;}//防止输出连续0
else t=0;
switch(zero)
{
case 100000000: System.out.print("亿");break;
case 10000000: System.out.print("仟萬");break;
case 1000000: System.out.print("佰萬");break;
case 100000: System.out.print("十萬");break;
case 10000: System.out.print("萬");break;
case 1000: System.out.print("仟");break;
case 100: System.out.print("佰");break;
case 10: System.out.print("拾");break;
case 1: System.out.print("圆");break;
}
if((m*zero/c)%zero==0){System.out.print("整");break;}
else if(zero==1)
{
k*=100;
int p=0;
for(int i=10;i>0;i/=10)
{
p=(int)(k/i);
if(p<1)continue;
switch(p)
{
case 1: System.out.print("壹");break;
case 2: System.out.print("贰");break;
case 3: System.out.print("叁");break;
case 4: System.out.print("肆");break;
case 5: System.out.print("伍");break;
case 6: System.out.print("陆");break;
case 7: System.out.print("柒");break;
case 8: System.out.print("捌");break;
case 9: System.out.print("玖");break;
case 0: System.out.print("零");break;
}
switch(i)
{
case 10: System.out.print("角"); break;
case 1: System.out.print("分"); break;
}
k%=10;
}
}
}
}
}
当k=1234567.98时.输出壹佰萬贰十萬叁萬肆仟伍佰陆拾
当k=10030500壹仟萬零叁萬零伍佰整
当k=10030501壹仟萬零叁萬零伍佰零
大家帮忙看下问题在哪里.或者有更简单的方法也行.先谢谢了.
public class MoneyB
{
public static void main(String[] args)
{
double k=10030501.98;
int n=0;int t=0;
double m;
for(int zero=100000000;zero>1;zero/=10)
{ //if((k <10)&&(zero>1))zero=1;
m=(k/zero);
int c=(int)(m);
if(((c==0)&&(n==0))||((c==0)&&(t==1)))continue;//防止开始输出0和连续输出0
else {k-=c*zero;n=1;}
switch(c)
{
case 1: System.out.print("壹");break;
case 2: System.out.print("贰");break;
case 3: System.out.print("叁");break;
case 4: System.out.print("肆");break;
case 5: System.out.print("伍");break;
case 6: System.out.print("陆");break;
case 7: System.out.print("柒");break;
case 8: System.out.print("捌");break;
case 9: System.out.print("玖");break;
case 0: System.out.print("零");break;
} if(c==0){t=1;continue;}//防止输出连续0
else t=0;
switch(zero)
{
case 100000000: System.out.print("亿");break;
case 10000000: System.out.print("仟");break;
case 1000000: System.out.print("佰");break;
case 100000: System.out.print("十");break;
case 10000: System.out.print("萬");break;
case 1000: System.out.print("仟");break;
case 100: System.out.print("佰");break;
case 10: System.out.print("拾");break;
case 1: System.out.print("圆");break; } if((m*zero/c)%zero==0){System.out.print("整");break;}
else if(zero==1)
{
k*=100;
int p=0;
for(int i=10;i>0;i/=10)
{
p=(int)(k/i);
if(p <1)continue;
switch(p)
{
case 1: System.out.print("壹");break;
case 2: System.out.print("贰");break;
case 3: System.out.print("叁");break;
case 4: System.out.print("肆");break;
case 5: System.out.print("伍");break;
case 6: System.out.print("陆");break;
case 7: System.out.print("柒");break;
case 8: System.out.print("捌");break;
case 9: System.out.print("玖");break;
case 0: System.out.print("零");break;
}
switch(i)
{
case 10: System.out.print("角"); break;
case 1: System.out.print("分"); break;
}
k%=10;
}
}
}
}
}
当k=1234567.98时.输出壹佰贰十叁萬肆仟伍佰陆拾
当k=10030500壹仟零叁萬零伍佰整
当k=10030501壹仟零叁萬零伍佰零 没有多出来的萬了!
/*
* 货币金额数字的小写转大写
*/
package other;import java.math.BigDecimal;
import java.text.DecimalFormat;public class MoneyB {
double dk=0;
public void number(int c){
switch(c)
{
case 1: System.out.print("壹");break;
case 2: System.out.print("贰");break;
case 3: System.out.print("叁");break;
case 4: System.out.print("肆");break;
case 5: System.out.print("伍");break;
case 6: System.out.print("陆");break;
case 7: System.out.print("柒");break;
case 8: System.out.print("捌");break;
case 9: System.out.print("玖");break;
case 0: System.out.print("零");break;
}
}
public void unit(int l){
switch(l-1)
{
case 6: System.out.print("佰");break;
case 5: System.out.print("十");break;
case 4: System.out.print("萬");break;
case 3: System.out.print("仟");break;
case 2: System.out.print("佰");break;
case 1: System.out.print("拾");break;
case 0: System.out.print("圆");break;
}
}
public void unitBig(int l){
switch(l-1)
{
case 1: System.out.print("亿");break;
case 0: System.out.print("仟");break;
}
}
public void unitdec(int d){
switch(d)
{
case 10: System.out.print("角"); break;
case 1: System.out.print("分"); break;
}
}
public void toHigh(String sk,int l){
for(int i=0;i<l;i++){
String sc=sk.substring(i,i+1); //依次取出每位的数字
String sc2=sk.substring(i+1,i+2); //依次取出每位数字的后一位
int sci=Integer.parseInt(sc); //强制转换为int类型
if(!sc.equals("0")){ //取出的数字不为零的情况下小转大
number(sci); //数字小转大
unit(l-i); //数字大写单位
}
if(l-i==5&&sc.equals("0")){ //单位为萬的处理
//unit(l-i);
System.out.print("萬");
}
if(l<5&&dk>=10000000){
System.out.print("萬"); //单位为萬的处理
}
if((l==i+1)&&sc.equals("0")){ //单位为圆的处理
System.out.print("圆");
}
if(sc.equals("0")&&(!sc2.equals("0")&&!sc2.equals("."))){ //碰到数字为零的情况
System.out.print("零");//zero=1;
}
}
}
public void big(){
double k = 100110011; //k为需转换的小写数字
dk=k;
/*
* 转换千万以上的数字为大写;
*/
int kk=(int)(k/10000000); //取出千万元的数字
if(k>=10000000){
String skBig=String.valueOf(kk); //转为字符串的型式,
int lBig=skBig.length(); //得到数字的位数(如,长度为1是千万单位级的,长度为2是亿单位级的
for(int i=0;i<lBig;i++){
String scBig=skBig.substring(i,i+1); //逐个取出每位的数字,从最大的数字开如(最在只能为亿单位)
String sc2Big="0";
try {
sc2Big = skBig.substring(i+1,i+2); //取出下一位的数字(千万单位),
} catch (Exception e) {
}
int sciBig=Integer.parseInt(scBig); //取出的是字符串的型式,需转换int类型
if(!scBig.equals("0")){ //如果数字不为零,则转换大写
number(sciBig); //数字转大写
unitBig(lBig-i); //单位转大写
}
//如果该数字为零,但下一个数字不是零,则输出"零",主要是避免多个零重复
if(scBig.equals("0")&&(!sc2Big.equals("0")&&!sc2Big.equals("."))){
System.out.print("零");
}
}
k=k-kk*10000000; //将提取千万以下的数字
}
int ikk=(int)kk/10; //取亿元数字
int sikk=kk-ikk*10;
/*
* 如果金额有佰万以下元单位,则转换千万以下的数字为大写;
*/
if(k!=0&&k>=1){ //此时的k已经去掉了亿和千万级的单位
String sk=String.valueOf(k); //转字符串型式
System.out.println("*"+sk+"*");
int l=sk.indexOf("."); //l为数字的位数
if(l<7&&dk>=10000000){
System.out.print("零"); //佰万元单位为零的处理
}
toHigh(sk,l); //调用转换方法
}
/*
* 如果金额没有佰万以下元单位,
*/
else{
if(kk>10){ //如果有亿元单位数字
if(sikk==0){ //如果有亿元单位数字而没有仟万元单位数字,则去掉"萬"字
System.out.print("圆");
}else{
System.out.print("萬");
}
}
}
/*
* 小数位的处理
*/
DecimalFormat df = new DecimalFormat("#.00"); //四舍五入 ,只精确到分
int kkk=(int)k; //去整数部分
if(kkk==k){ //如果金额为整数,则显示为整(即没有角和分);
System.out.print("整");
}else{ //如果不为整数就转换角、分为大写;,
double dec= (k-kkk)*100; //去掉整数部分,再乖以100,使分和角成为整数,方便转换;
String decStr=df.format((k-kkk)*100); //将结果四舍五入,精确到分
String scdeciSt=decStr.substring(0,1); //取得角的数字
String sc2deciSt="0";
try {
sc2deciSt = decStr.substring(1,2); //取得分的数字
} catch (Exception e) {
}
int scideciSt=Integer.parseInt(scdeciSt); //取得的数字是字符型式,强制转换为int类型
if(!sc2deciSt.equals(".")){ //如果角不为零(即sc2deciSt一下个字符不是有".")则转换角为大写
number(scideciSt);
unitdec(10);
if(!sc2deciSt.equals("0")){ //如果分不为零,则转换分为大写
int sc2ideciSt=Integer.parseInt(sc2deciSt);
number(sc2ideciSt); //此时sc2ideciSt为分的单位
unitdec(1);
}
}else{ //如果角为零,先输出“零”,再转换分为大写
number(0);
number(scideciSt); //此时scideciSt为分的单位
unitdec(1);
}
}
}
public static void main(String[] args) {
MoneyB mo=new MoneyB();
mo.big();
}
}
这个程序花了我两天时间,程序还在测试当中,还想改进一下
1、定义一个数组 unit{"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"}
2、将数字变成字符串,然后再反转。
3、取unit数组的 前 (字符串长度位),让数字在后单位在前,组成字符串,然后反转。(如:壹佰零拾壹万叁千零佰零拾零元)
4、处理字符串中零的问题。5、对小数的处理。
* 货币金额数字的小写转大写
*/
package other;import java.text.DecimalFormat;
import java.util.Scanner;public class MoneyB {
double dk=0;//原始K的值
int ss=0;//屏蔽千万和百万两个零同时出现的变量
public void number(int c){
switch(c)
{
case 1: System.out.print("壹");break;
case 2: System.out.print("贰");break;
case 3: System.out.print("叁");break;
case 4: System.out.print("肆");break;
case 5: System.out.print("伍");break;
case 6: System.out.print("陆");break;
case 7: System.out.print("柒");break;
case 8: System.out.print("捌");break;
case 9: System.out.print("玖");break;
case 0: System.out.print("零");break;
}
}
public void unit(int l){
switch(l-1)
{
case 6: System.out.print("佰");break;
case 5: System.out.print("十");break;
case 4: System.out.print("萬");break;
case 3: System.out.print("仟");break;
case 2: System.out.print("佰");break;
case 1: System.out.print("拾");break;
case 0: System.out.print("圆");break;
}
}
public void unitBig(int l){
switch(l-1)
{
case 1: System.out.print("亿");break;
case 0: System.out.print("仟");break;
}
}
public void unitdec(int d){
switch(d)
{
case 10: System.out.print("角"); break;
case 1: System.out.print("分"); break;
}
}
public void toHigh(String sk,int l){
for(int i=0;i<l;i++){
String sc=sk.substring(i,i+1); //依次取出每位的数字
String sc2=sk.substring(i+1,i+2); //依次取出每位数字的后一位
int sci=Integer.parseInt(sc); //强制转换为int类型
if(l<7&&dk>=10000000&&i==0&&ss==0){
System.out.print("零"); //佰万元单位为零的处理
}
if(!sc.equals("0")){ //取出的数字不为零的情况下小转大
number(sci); //数字小转大
unit(l-i); //数字大写单位
}
if(l-i==5&&sc.equals("0")){ //单位为萬的处理
System.out.print("萬");
}
if((l==i+1)&&sc.equals("0")){ //十位数为0,个位数不为0,加圆零
if(dk==(int)dk)System.out.print("圆"); //如果没有小数位加圆
else { //如果有小数位
if(((int)(dk*10))%10!=0)
System.out.print("圆零"); //如果小数位有角位加圆
else
System.out.print("圆"); //如果小数位没有角位加圆 零
}
}
if((l==i)&&sc.equals("0")){ //个位数不为0,加圆
System.out.print("圆");
}
if(sc.equals("0")&&(!sc2.equals("0")&&!sc2.equals("."))){ //碰到数字为零的情况
System.out.print("零");
}
}
}
public void big(){
// double k = 110001010.01; //k为需转换的小写数字
// double k = 100000000;
// double k = 100001010;
double k=0;
dk=k; //保存k的原始值
/*
* 转换千万以上的数字为大写;
*/
int kk=(int)(k/10000000); //取出千万元的数字
int kky=(int)(k/100000000);
int kky1=kky; //取出亿元的数字
kky*=100000000;
if(k>=10000000){
String skBig=String.valueOf(kk); //转为字符串的型式,
int lBig=skBig.length(); //得到数字的位数(如,长度为1是千万单位级的,长度为2是亿单位级的
for(int i=0;i<lBig;i++){
String scBig=skBig.substring(i,i+1); //逐个取出每位的数字,从最大的数字开如(最在只能为亿单位)
String sc2Big="0";
try {
sc2Big = skBig.substring(i+1,i+2); //取出下一位的数字(千万单位),
} catch (Exception e) {
}
int sciBig=Integer.parseInt(scBig); //取出的是字符串的型式,需转换int类型
if(!scBig.equals("0")){ //如果数字不为零,则转换大写
number(sciBig); //数字转大写
unitBig(lBig-i); //单位转大写
}
//如果该数字为零,但下一个数字不是零,则输出"零",主要是避免多个零重复
if(scBig.equals("0")&&(!sc2Big.equals("0")&&!sc2Big.equals("."))){
System.out.print("零");
}
}
k=k-kk*10000000; //将提取千万以下的数字
}
int ikk=(int)kk/10; //取亿元数字
int sikk=kk-ikk*10;
/*
* 如果金额有佰万以下元单位,则转换佰万以下的数字为大写;
*/
if(k!=0&&k>=1){ //此时的k已经去掉了亿和千万级的单位
String sk=String.valueOf(k); //转字符串型式
int l=sk.indexOf("."); //l为数字的位数
if(kk>=10&&kk%10==0){
System.out.print("零"); //如果亿位数不为0,而千万位数为0
ss=1;
}
if(l<=4&&kk%10!=0)
System.out.print("萬"); //如果仟万位不为0,万到百万位为0,则加万
toHigh(sk,l); //调用转换方法
}
/*
* 如果金额没有佰万以下元单位,
*/
else{
if(kk>=10){ //如果亿位数字不为0
if(sikk==0){ //如果亿位数字不为0而仟万位数字为0,则去掉"萬"字
if(dk==(int)dk)
System.out.print("圆"); //如果没有小数位
else
System.out.print("圆零"); //有小数位
}else{ //亿位数为不为0,仟万位也不为0
if(dk==(int)dk)
System.out.print("萬圆");
else
System.out.print("萬圆零");
}
}else{
if(kk<10&&dk==(int)dk){ //如果亿位为0,而且没有小数位的情况
if(dk==0)
System.out.print("零"); //如果转换的货币金额为0,则显零
else
System.out.print("萬圆"); //否则加 萬圆
}else if(kk%10!=0){ //亿位数为0,千万数不为0
System.out.print("萬圆零");
}
}
}
/*
* 小数位的处理
*/
DecimalFormat df = new DecimalFormat("#.00"); //四舍五入 ,只精确到分
int kkk=(int)k; //去整数部分
if(kkk==k){ //如果金额为整数,则显示为整(即没有角和分);
if(dk!=0)System.out.print("整"); //如果金额为0,则不显;
}else{ //如果不为整数就转换角、分为大写;,
double dec= (k-kkk)*100; //去掉整数部分,再乖以100,使分和角成为整数,方便转换;
String decStr=df.format((k-kkk)*100); //将结果四舍五入,精确到分
String scdeciSt=decStr.substring(0,1); //取得角的数字
String sc2deciSt="0";
try {
sc2deciSt = decStr.substring(1,2); //取得分的数字
} catch (Exception e) {
}
int scideciSt=Integer.parseInt(scdeciSt); //取得的数字是字符型式,强制转换为int类型
if(!sc2deciSt.equals(".")){ //如果角不为零(即sc2deciSt一下个字符不是有".")则转换角为大写
number(scideciSt);
unitdec(10);
if(!sc2deciSt.equals("0")){ //如果分不为零,则转换分为大写
int sc2ideciSt=Integer.parseInt(sc2deciSt);
number(sc2ideciSt); //此时sc2ideciSt为分的单位
unitdec(1);
}
}else{ //如果角为零,先输出“零”,再转换分为大写
if(dk>=1)number(0); //如果小于壹元不加零
number(scideciSt); //此时scideciSt为分的单位
unitdec(1);
}
}
}
public static void main(String[] args) {
MoneyB mo=new MoneyB();
mo.big();
}
}
先将float转换为String类型的
然后用正则表达式来处理!
今天没时间,空了写一个贴出来!