java数字相减_Java的加减乘除运算
作为Java初学者,在学习了基本数据类型之后,⼤哥给我布置了作业,内容如下:
计算题:假如今天逛超市花了99.99 请⽤加减乘除,进⾏计算得到99.99这个结果。
要求:1,4个⽅法;
2,数值随意编写;
3,数值要⽤到int、long、float、double四种类型;
4,都是返回值,实例化后打印。
⼀开始,我建了4个类,按照加减乘除的拼⾳分别命名为jia、jian、cheng、chu,代码如下所⽰。
1 public class jia { //加法
2 int a = 10;
3 long b = 35;
4 float c = 36.95f;
5 double d = 18.04;
6 public voidjiafa() {
7 double jia =a + b + c +d;
8 System.out.println("加法运算结果是:" +jia);
9 }10 }
1 public classjian { //减法
2 long a = 300;
3 int b = 18;
4 float c = 128.7f;
5 double d = 53.31;
6 public voidjianfa() {
7 float jian = (float)(a - b - c - (double)d);
8 System.out.println("减法运算结果是:" +jian);
9 }10 }
1 public class cheng { //乘法
2 int a = 1;
3 long b = 1000000;
4 float c = 0.000001f;
5 double d = 99.99;
6 public voidchengfa() {
7 double cheng = a * b * c *d;
8 System.out.println("乘法运算结果是:" +cheng);
9 }
10 }
1 public class chu { //除法
2 int a = 1000;
3 long b = 1000000;
4 float c = 0.001f;
5 double d = 99.99;
6 public voidchufa() {
7 float chu = (float) ((double)d/(a/b/c));
8 System.out.println("除法运算结果是:" +chu);
9 }10 }
然后,新建⼀个类,命名为yunsuan,将上述四则运算实例化并输出结果,代码如下:
1 public classyunsuan {
2 public static voidmain(String[] args) {
3 jia jiafa = new jia(); //实例化加法
4 jian jianfa = new jian(); //实例化减法
5 cheng chengfa = new cheng(); //实例化乘法
6 chu chufa = new chu(); //实例化除法
7
8 jiafa.jiafa(); //调⽤加法⽅法
9 jianfa.jianfa();10chengfa.chengfa();11chufa.chufa();12}13 }
运⾏结果如下图:
除了乘法之外,其他的运算都没有得到我想要的99.99这个结果,这是为什么呢?
经过讲解和查阅资料之后,原来浮点数是不适合精确计算的,原因是计算机⾥⾯数的计算都是⼆进制计算的,我们其实输⼊的⼗进制数,有些⼗进制数转换成⼆进制是可以精确转换,⽽有些转换则不是精确转换,得到的是⼀个最靠近它的数,所以这⾥⾯就存在⼀个误差。另外,如果浮点数不进⾏计算时,在⼗进制⾥⾯浮点数能正确显⽰,如果浮点数参与了计算,那么浮点数⼆进制与⼗进制间的转换过程就会变得不可⽽知,变得不可逆。
那么要想使得到的结果精确,可以使⽤Java DecimalFormat 类,⽤于格式化⼗进制数字。
⽤法:
double pi = 3.1415926;
DecimalFormat form= new DecimalFormat("#.00");//#.00 表⽰两位⼩数 #.0000四位⼩数 以此类推
也可以使⽤Java在java.math包中提供的API类BigDecimal,⽤来对超过16位有效位的数进⾏精确的运算。
⽤法:
importjava.math.BigDecimal;double a = 3.1516;
bigdecimal除法保留小数BigDecimal b= new String(a));
以加法为例,我们可以⽤BigDecimal求值,代码⽰例如下:
1 importjava.math.BigDecimal;2
3 BigDecimal b1 = String(a));
4 BigDecimal b2 = String(b));
5 BigDecimal
b3 = String(c));6 BigDecimal b4 = String(d));7
8 double a= b1.add(b2).add(b3).add(b4).doubleValue();
这⾥还要注意的是,除法得到的结果是Infinity,这是因为整型和整型相除,得到的仍然是整型;a = 100,b = 1000,a/b 应该等于
0.001,实际上得到的是0.0,由于0不能做除数,因此得到的值是⽆效的,因此就需要Java数值之间的强制转换,强制转换是将需要转换的数值转换为需要的类型。
1 float chu = (float)((double)d4/(a4/b4/c4)); //错误写法
2 float chu = (float)((double)d4/((float)a4/(float)b4/c4)); //正确写法
经过深⼊理解,将以上代码整合到⼀个yunsuan的⽂件⾥,代码如下:
DecimalFormat;2
3 public classyunsuan {
4 public voidjiafa(){
5 int a1 = 10;
6 long b1 = 35;
7 float c1 = 36.95f;
8 double d1 = 18.04;9
10 DecimalFormat form = new DecimalFormat("#.00");//保留两位⼩数
11 double jia =a1 + b1 + c1 +d1;12 System.out.println("加法运算结果是:" +form.format(jia));13 }14 public voidjianfa(){15 long a2 = 300;16 int b2 = 18;17 float c2 = 128.7f;18 double d2 = 53.31;19
20 DecimalFormat form = new DecimalFormat("#.00");//保留两位⼩数
21 float jian = (float)(a2 - b2 - c2 - (double)d2);22 System.out.println("减法运算结果是:" +form.format(jian));23 }24 public voidchengfa() {25 int a3 = 1;26 long b3 = 1000000;27 float c3 = 0.000001f;28 double d3 = 99.99;29
30 double cheng = a3 * b3 * c3 *d3;31 System.out.println("乘法运算结果是:" +cheng);32 }33 public voidchufa() {34 int a4 = 1000;35 long b4 = 1000000;36 float c4 = 0.001f;37 double d4 = 99.99;38
39 float chu = (float)((double)d4/((float)a4/(float)b4/c4));40 System.out.println("除法运算结果是:" +chu);41 }42
43 public static voidmain(String[] args) {44 yunsuan jiafa = new yunsuan(); //实例化
45 yunsuan jianfa = newyunsuan();46 yunsuan chengfa = newyunsuan();47 yunsuan chufa = newyunsuan();48 49 jiafa.jiafa();50 jianfa.jianfa();51 chengfa.chengfa();52 chufa.chufa();53 }54 }
亲测全部为99.99,结果正确。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论