首页编程java编程java用什么类型表示金额 java简单题:一组金额数据,用人民币大写显示出来

java用什么类型表示金额 java简单题:一组金额数据,用人民币大写显示出来

编程之家 2023-10-13 89次浏览

今天给各位分享java用什么类型表示金额的知识,其中也会对java简单题:一组金额数据,用人民币大写显示出来进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

java用什么类型表示金额 java简单题:一组金额数据,用人民币大写显示出来

java 结果集中list中根据每一个币种进行金额求和怎么写

代码写好了,币种和金额作为Money类的属性存储到List中,再将List中重复币种的金额相加,如下(注意在Eclipse或者MyEclispse里面运行时,添加相关的包):

public class Money{

java用什么类型表示金额 java简单题:一组金额数据,用人民币大写显示出来

private String type;//币种

private int value;//金额

//初始化币种和金额

java用什么类型表示金额 java简单题:一组金额数据,用人民币大写显示出来

public Money(String type,int value){

this.type=type;

this.value=value;

}

//这个构造器仅仅用于获得一个Money类去调用isSameType()方法,注意这个类只能在本类中使用

Money(){}

//获取相同类型的币种并且将它们的金额总和放在一个list中

public List isSameType(List<Money> list){

List l= new ArrayList<Money>();

if(list!=null){

for(int i= 0; i< list.size(); i++){

int sumMoney=list.get(i).value;

for(int j= i+1;j<list.size();j++){

if(list.get(i).type.equals(list.get(j).type)){

sumMoney=sumMoney+list.get(j).value;

list.remove(list.get(j));

j=j-1;//删除一个元素以后还原指针位置

}

}

Money m=new Money(list.get(i).type,sumMoney);

l.add(m);

}

}

return l;

}

public String toString(){

return"币种类型:"+ this.type+"\t金额总和:"+this.value;

}

public static void main(String[] args){

//初始化

List<Money> list= new ArrayList<Money>();

Money m1= new Money("dollar",6);

Money m2= new Money("renmbi",8);

Money m3= new Money("dollar",7);

Money m4= new Money("dollar",9);

Money m5= new Money("lubu",4);

Money m6= new Money("renmbi",10);

Money m7= new Money("lubu",3);

Money m8= new Money("taidao",15);

list.add(m1);//注意这里加入两次m1

list.add(m1);

list.add(m2);

list.add(m3);

list.add(m4);

list.add(m5);

list.add(m6);

list.add(m7);

list.add(m8);

Money m= new Money();

//求和

List l= m.isSameType(list);

for(int i= 0; i< l.size(); i++){

System.out.println(l.get(i));

}

}

}

java加减乘除是什么类

java中实现加减乘除的类是java.math.BigDecimal类. BigDecimal类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。

加法运算:调用BigDecimal类的add方法即可

BigDecimalb1=newBigDecimal("1");

BigDecimalb2=newBigDecimal("2");

BigDecimalresult=b1.add(b2);//加法

System.out.println(result);

减法运算:调用BigDecimal类的subtract方法即可

BigDecimalb1=newBigDecimal(3.2);

BigDecimalb2=newBigDecimal(1.6);

BigDecimalresult=b1.subtract(b2);//减法

System.out.println(result);

乘法运算:调用BigDecimal类的multiply方法即可

BigDecimalb1=newBigDecimal(9);

BigDecimalb2=newBigDecimal(8.2);

BigDecimalresult=b1.multiply(b2);//乘法

System.out.println(result);

除法运算:调用BigDecimal类的divide方法即可。

注意:除法运算存在除不尽的情况,比如1.0/3=0.333333..我们需要指定小数点后面的长度,以及有效的舍入模式(例如四舍五入模式).

BigDecimalb1=newBigDecimal("1");

BigDecimalb2=newBigDecimal("3");

intscale=5;//scale指定小数点后面的位数为5位

doubleresult=b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();//除法

//BigDecimal.ROUND_HALF_UP表示四舍五入

System.out.println(result);

备注:

1:BigDecimal的构造参数有很多,但浮点类型建议转换成字符串类型,避免精度的丢失.

doubled1=0.001;//浮点类型

Strings1=Double.toString(d1);//转成字符串

BigDecimalb1=newBigDecimal(s1);//使用字符串作为构造参数

2:BigDecimal类,内存占用比基本类型多,并且为了计算的精度,速度比double慢一点.所以,只有在需要精确计算的情况下,才使用BigDecimal类进行.普通运算,还是多使用+-*/运算符,位运算符等.

java简单题:一组金额数据,用人民币大写显示出来

/**

*程序目的:

*从命令行接收一个数,并将其转化为中文金额的大写方式

*例如123.45-->壹佰贰拾叁元肆角伍分

*@authorgdb

*

*实在是不符合规范,程序里面的算法没有让人明白得很清楚的注释,读上去觉得有

*点难度,可读性不强。而且很多程序还存在不少bug,随便一测就测出来了。

*所以本人还是决定重新写一下这个程序,并且尽量做到消除不必要的bug。这个程

*序我没有用什么很精妙的算法,不过用了一些Java类库中的类,像是正则表达式之类

*

*/

publicclassTrans2RMB{

/**

*测试程序的可行性

*@paramargs

*/

publicstaticvoidmain(String[]args){

System.out.println("\n--------将数字转换成中文金额的大写形式------------\n");

Trans2RMBt2r=newTrans2RMB();

Strings=t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));

//如果转换过后是一个空串,则不输出屏幕

if(!"".equals(s)){

System.out.println("转换成中文后为:"+s);;

}

System.out.println("\n---------------------------------------------");

}

/**

*从命令行接收一个数,在其中调用checkNum()方法对其进行

*验证,并返回相应的值

*@return如果输入合法,返回输入的这个数

*/

privateStringgetNum(){

Strings=null;

System.out.println("请输入一个数字(精确到小数点后两位):");

//从命令行输入这个浮点数

java.util.Scannerscanner=newjava.util.Scanner(System.in);

s=scanner.next();

//关闭这个Scanner

scanner.close();

//判断用户输入是否合法

//若合法,返回这个值;若非法返回"0"

if(this.checkNum(s)){

returns;

}else{

return"";

}

}

/**

*判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符

*@paramsString

*@return如果用户输入数据合法,返回true,否则返回false

*/

privatebooleancheckNum(Strings){

//如果用户输入的数里有非数字字符,则视为非法数据,返回false

try{

floatf=Float.valueOf(s);

//如果这个数小于零则视为非法数据,返回false

if(f<0){

System.out.println("非法数据,请检查!");

returnfalse;

}else{

returntrue;

}

}catch(NumberFormatExceptione){

System.out.println("非法数据,请检查!");

returnfalse;

}

}

/**

*把用户输入的数以小数点为界分割开来,并调用numFormat()方法

*进行相应的中文金额大写形式的转换

*注:传入的这个数应该是经过roundString()方法进行了四舍五入操作的

*@paramsString

*@return转换好的中文金额大写形式的字符串

*/

privateStringsplitNum(Strings){

//如果传入的是空串则继续返回空串

if("".equals(s)){

return"";

}

//以小数点为界分割这个字符串

intindex=s.indexOf(".");

//截取并转换这个数的整数部分

StringintOnly=s.substring(0,index);

Stringpart1=this.numFormat(1,intOnly);

//截取并转换这个数的小数部分

StringsmallOnly=s.substring(index+1);

Stringpart2=this.numFormat(2,smallOnly);

//把转换好了的整数部分和小数部分重新拼凑一个新的字符串

StringnewS=part1+part2;

returnnewS;

}

/**

*对传入的数进行四舍五入操作

*@paramsString从命令行输入的那个数

*@return四舍五入后的新值

*/

privateStringroundString(Strings){

//如果传入的是空串则继续返回空串

if("".equals(s)){

return"";

}

//将这个数转换成double类型,并对其进行四舍五入操作

doubled=Double.parseDouble(s);

//此操作作用在小数点后两位上

d=(d*100+0.5)/100;

//将d进行格式化

s=newjava.text.DecimalFormat("##0.000").format(d);

//以小数点为界分割这个字符串

intindex=s.indexOf(".");

//这个数的整数部分

StringintOnly=s.substring(0,index);

//规定数值的最大长度只能到万亿单位,否则返回"0"

if(intOnly.length()>13){

System.out.println("输入数据过大!(整数部分最多13位!)");

return"";

}

//这个数的小数部分

StringsmallOnly=s.substring(index+1);

//如果小数部分大于两位,只截取小数点后两位

if(smallOnly.length()>2){

StringroundSmall=smallOnly.substring(0,2);

//把整数部分和新截取的小数部分重新拼凑这个字符串

s=intOnly+"."+roundSmall;

}

returns;

}

/**

*把传入的数转换为中文金额大写形式

*@paramflagint标志位,1表示转换整数部分,0表示转换小数部分

*@paramsString要转换的字符串

*@return转换好的带单位的中文金额大写形式

*/

privateStringnumFormat(intflag,Strings){

intsLength=s.length();

//货币大写形式

StringbigLetter[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

//货币单位

Stringunit[]={"元","拾","佰","仟","万",

//拾万位到仟万位

"拾","佰","仟",

//亿位到万亿位

"亿","拾","佰","仟","万"};

Stringsmall[]={"分","角"};

//用来存放转换后的新字符串

StringnewS="";

//逐位替换为中文大写形式

for(inti=0;i<sLength;i++){

if(flag==1){

//转换整数部分为中文大写形式(带单位)

newS=newS+bigLetter[s.charAt(i)-48]+unit[sLength-i-1];

}elseif(flag==2){

//转换小数部分(带单位)

newS=newS+bigLetter[s.charAt(i)-48]+small[sLength-i-1];

}

}

returnnewS;

}

/**

*把已经转换好的中文金额大写形式加以改进,清理这个字

*符串里面多余的零,让这个字符串变得更加可观

*注:传入的这个数应该是经过splitNum()方法进行处理,这个字

*符串应该已经是用中文金额大写形式表示的

*@paramsString已经转换好的字符串

*@return改进后的字符串

*/

privateStringcleanZero(Strings){

//如果传入的是空串则继续返回空串

if("".equals(s)){

return"";

}

//如果用户开始输入了很多0去掉字符串前面多余的'零',使其看上去更符合习惯

while(s.charAt(0)=='零'){

//将字符串中的"零"和它对应的单位去掉

s=s.substring(2);

//如果用户当初输入的时候只输入了0,则只返回一个"零"

if(s.length()==0){

return"零";

}

}

//字符串中存在多个'零'在一起的时候只读出一个'零',并省略多余的单位

/*由于本人对算法的研究太菜了,只能用4个正则表达式去转换了,各位大虾别介意哈...*/

Stringregex1[]={"零仟","零佰","零拾"};

Stringregex2[]={"零亿","零万","零元"};

Stringregex3[]={"亿","万","元"};

Stringregex4[]={"零角","零分"};

//第一轮转换把"零仟",零佰","零拾"等字符串替换成一个"零"

for(inti=0;i<3;i++){

s=s.replaceAll(regex1[i],"零");

}

//第二轮转换考虑"零亿","零万","零元"等情况

//"亿","万","元"这些单位有些情况是不能省的,需要保留下来

for(inti=0;i<3;i++){

//当第一轮转换过后有可能有很多个零叠在一起

//要把很多个重复的零变成一个零

s=s.replaceAll("零零零","零");

s=s.replaceAll("零零","零");

s=s.replaceAll(regex2[i],regex3[i]);

}

//第三轮转换把"零角","零分"字符串省略

for(inti=0;i<2;i++){

s=s.replaceAll(regex4[i],"");

}

//当"万"到"亿"之间全部是"零"的时候,忽略"亿万"单位,只保留一个"亿"

s=s.replaceAll("亿万","亿");

returns;

}

}

java用什么类型表示金额的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java简单题:一组金额数据,用人民币大写显示出来、java用什么类型表示金额的信息别忘了在本站进行查找哦。

java me是什么(java ME是什么) 用什么运行java程序?JAVA编程是用什么软件的