java 金额用什么类型 java加减乘除是什么类
大家好,今天小编来为大家解答java 金额用什么类型这个问题,java加减乘除是什么类很多人还不知道,现在让我们一起来看看吧!
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.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类进行.普通运算,还是多使用+-*/运算符,位运算符等.
decimal相当于java什么类型
DecimalFormat是 NumberFormat的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够分析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数(123)、定点数(123.4)、科学记数法表示的数(1.23E4)、百分数(12%)和金额($123)。所有这些内容都可以本地化。
举个例子你定义了一个 int number= 123;
DecimalFormat abc=new DecimalFormat("0.00");
abc.format(number)的值就变成了123.00;了
格式化数字用的
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!