首页编程java编程java 金额用什么类(java加减乘除是什么类)

java 金额用什么类(java加减乘除是什么类)

编程之家2023-10-1498次浏览

这篇文章给大家聊聊关于java 金额用什么类,以及java加减乘除是什么类对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

java 金额用什么类(java加减乘除是什么类)

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

/**

*程序目的:

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

java 金额用什么类(java加减乘除是什么类)

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

*@authorgdb

*

java 金额用什么类(java加减乘除是什么类)

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

*点难度,可读性不强。而且很多程序还存在不少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高手进~~在线等~~

/**

*@version 1.0

*@author Devil_Angel

*该程序的功能为实现模拟银行ATM自动取款机提款,查询等功能.

*

*/

import java.io.*;

/*该类为实现客户信息及部分功能*/

class Account{

private String code=null;//信用卡号

private String name=null;//客户姓名

private String password=null;//客户密码

private double money=0.0;//卡里金额

/********************/

public Account(String code,String name,String password,double money)

{

this.code=code;

this.name=name;

this.password=password;

this.money=money;

}

protected String get_Code(){

return code;

}

protected String get_Name(){

return name;

}

protected String get_Password(){

return password;

}

public double get_Money(){

return money;

}

/*得到剩余的钱的数目*/

protected void set_Balance(double mon){

money-= mon;

}

}

/**********实现具体取款机功能*********/

class ATM{

Account act;

// private String name;

// private String pwd;

public ATM(){

act=new Account("000000","Devil","123456",50000);

}

/***********欢迎界面***********/

protected void Welcome()

{

String str="---------------------------------";

System.out.print(str+"\n"+

"欢迎使用Angel模拟自动取款机程序.\n"+str+"\n");

System.out.print(" 1.>取款."+"\n"+

" 2.>查询信息."+"\n"+

" 3.>密码设置."+"\n"+

" 4.>退出系统."+"\n");

}

/**********登陆系统**********/

protected void Load_Sys() throws Exception

{

String card,pwd;

int counter=0;

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

do{

System.out.println("请输入您的信用卡号:");

card=br.readLine();

System.out.println("请输入您的密码:");

pwd=br.readLine();

if(!isRight(card,pwd))

{

System.out.println("您的卡号或密码输入有误.");

counter++;

}

else

SysOpter();

}while(counter<3);

Lock_Sys();

}

/**********系统操作**********/

protected void SysOpter() throws Exception

{

int num;

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

System.out.println("请选择您要操作的项目(1-4):");

num=br.read();//num为ASICC码转换的整数

switch(num){

case 49: BetBalance(); break;

case 50: Inqu_Info(); break;

case 51: Set_Password(); break;

case 52: Exit_Sys(); break;

}

System.exit(1);

}

/**********信息查询**********/

protected void Inqu_Info(){

System.out.print("---------------------\n"+

act.get_Code()+"\n"+

act.get_Name()+"\n"+

act.get_Money()+"\n"+

"-----------------------");

}

/**********取款**********/

public void BetBalance() throws Exception

{

String str=null,str1;

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

do{

System.out.println("请输入您要取的数目:");

str=br.readLine();

str1=String.valueOf(act.get_Money());

if(str.compareTo(str1)>0){

System.out.println("超过已有的钱数,请重新输入您要取的数目:");

}

else{

/*操作成功*/

// act.set_Balance(str);

System.out.println("取款成功,请收好您的钱.");

Welcome();

SysOpter();

}

}while(true);

}

/**********判断卡内是否有钱**********/

protected boolean isBalance(){

if(act.get_Money()<0){

// System.out.println("对不起,您的钱数不够或卡已透支.");

return false;

}

return true;

}

/********卡号密码是否正确******/

protected boolean isRight(String card,String pwd)

{

if(act.get_Code().equals(card)&& act.get_Password().equals(pwd))

return true;

else

return false;

}

/**********密码修改**********/

protected void Set_Password() throws Exception

{

String pwd=null;

int counter=0;

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

do{

System.out.println("请输入旧密码:");

pwd=br.readLine();

if(act.get_Password().equals(pwd))

{

do{

System.out.println("请输入新密码:");

String pwd1=br.readLine();

System.out.println("请再次输入新密码:");

String pwd2=br.readLine();

if(!pwd1.equals(pwd2))

{

System.out.println("两次输入不一致,请再次输入.");

}

else

{

System.out.println("密码修改成功,请使用新密码.");

Welcome();

SysOpter();

}

}while(true);

}

}while(counter>3);

}

/**********锁定机器**********/

protected void Lock_Sys(){

System.out.println("对不起,您的操作有误,卡已被没收.");

System.exit(1);

}

/**********结束系统**********/

protected void Exit_Sys(){

System.out.println("感谢您使用本系统,欢迎下次在来,再见!");

System.exit(1);

}

}

public class Text

{

public static void main(String[] args) throws Exception

{

ATM atm=new ATM();

atm.Welcome();

atm.Load_Sys();

// atm.Exit_Sys();

}

}

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 金额用什么类和java加减乘除是什么类的问题解决了您的问题,那么我们由衷的感到高兴!

天使的翅膀西单女孩(天使的翅膀西单女孩吉他谱)java项目 用什么软件(开发java用什么软件)