java用什么类型表示金额 java简单题:一组金额数据,用人民币大写显示出来
今天给各位分享java用什么类型表示金额的知识,其中也会对java简单题:一组金额数据,用人民币大写显示出来进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
java 结果集中list中根据每一个币种进行金额求和怎么写
代码写好了,币种和金额作为Money类的属性存储到List中,再将List中重复币种的金额相加,如下(注意在Eclipse或者MyEclispse里面运行时,添加相关的包):
public class Money{
private String type;//币种
private int value;//金额
//初始化币种和金额
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用什么类型表示金额的信息别忘了在本站进行查找哦。