吉林省白山市建设局官方网站,我对网站开发的项目反思,射阳做企业网站多少钱,在线天堂おっさんとわたし目录
API 1.0 BigDecimal 类说明 1.1 为什么浮点数会计算不精确呢#xff1f; 1.2 如何创建 BigDecimal 类型的对象 1.2.1具体来介绍三种方式来创建#xff1a; 1.2.2 结合三种创建方法#xff0c;一起来分析一下。 1.3 BigDecimal 类中的 valueOf(Strin…目录
API 1.0 BigDecimal 类说明 1.1 为什么浮点数会计算不精确呢 1.2 如何创建 BigDecimal 类型的对象 1.2.1具体来介绍三种方式来创建 1.2.2 结合三种创建方法一起来分析一下。 1.3 BigDecimal 类中的 valueOf(String str) 方法 1.4 BigDecimal 类中的 add() 方法加减乘除的操作都是一样的就不多赘述了 1.5 BigDecimal 类中的 doubleValue() 方法 API 1.0 BigDecimal 类说明 BigDecimal 类是Java中用于精确表示大数的类可以进行精确的数值运算。在需要精确计算的场景中可以使用 BigDecimal 类来避免由于浮点数计算误差导致的计算结果不准确的问题。 1.1 为什么浮点数会计算不精确呢
代码如下 public class Text {public static void main(String[] args) {double data1 0.1;double data2 0.2;System.out.println(data1data2);}
} 运行代码如下 结果不是0.3显然结果跟我们预想的不一样。当然不是所以的浮点数运行出来的结果都是错误的只是有这一部分是运行出来的结果是错误的但是这一部分我们作为合格的程序员来说是不能接收的。 浮点数在计算机中的表示方式是通过将数值分为两部分尾数和指数。尾数用来表示数值的有效位数而指数用来表示数值的大小范围。然而由于计算机内存的限制尾数和指数都只能用有限的位数来表示这就导致了浮点数的精度有限。 二进制表示计算机使用二进制来表示浮点数而大部分十进制数无法精确转换为二进制表示。例如0.1十进制在二进制表示中是一个无限循环的小数0.00011001100110011...因此在计算机中只能近似表示。 有限的位数浮点数的尾数和指数都只能用有限的位数来表示这就导致了浮点数的精度有限。例如Java中的double类型只能精确表示15位有效数字超过这个范围的数字会被截断或四舍五入。 浮点数运算误差在进行浮点数运算时由于尾数和指数的有限位数表示计算机无法精确表示所有的运算结果。这就导致了浮点数运算的结果可能存在一定的误差。 舍入误差在将一个浮点数转换为二进制表示时可能会存在舍入误差。例如一个无限循环的小数在转换为二进制表示时会被截断或四舍五入从而导致精度损失。 1.2 如何创建 BigDecimal 类型的对象 1.2.1具体来介绍三种方式来创建
1.代码如下 import java.math.BigDecimal;public class BigDecimalMethod1 {public static void main(String[] args) {//先定义了两个基本数据类型我们知道//0.1 0.2 在double 类型运行是不精确的double data1 0.1;double data2 0.2;//由基本数据类型转变为引用类型//利用自动装箱在等号后面可以直接写基本数据类型它会自动装箱Double d1 data1;Double d2 data2;//将Double类型转变为String类型//利用Double类型实例方法toString()String s1 d1.toString();String s2 d2.toString();//利用构造器传进字符串来创建对象//由字符串类型转变为BigDecimal类型BigDecimal b1 new BigDecimal(s1);BigDecimal b2 new BigDecimal(s2);//BigDecimal类中的实例方法 add()方法//将两个BigDecimal类型相加BigDecimal c b1.add(b2);//调用BigDecimal的实例方法 doubleValue()//将BigDecimal类型转变为基本数据类型double a c.doubleValue();//1是为了表达a是浮点型不是字符串System.out.println(a1);}} 运行结果如下 2.代码如下 import java.math.BigDecimal;public class BigDecimalMethod2 {public static void main(String[] args) {//先定义了两个基本数据类型我们知道//0.1 0.2 在double 类型运行是不精确的double data1 0.1;double data2 0.2;//直接调用Double类中的静态方法toString()//转变为字符串String s1 Double.toString(data1);String s2 Double.toString(data2);//利用有参数的构造器传入字符串创建对象BigDecimal b1 new BigDecimal(s1);BigDecimal b2 new BigDecimal(s2);//BigDecimal类中的实例方法 add()方法//将两个BigDecimal类型相加BigDecimal c b1.add(b2);//调用BigDecimal的实例方法 doubleValue()//将BigDecimal类型转变为基本数据类型double a c.doubleValue();//1是为了表达a是浮点型不是字符串System.out.println(a 1);}} 运行结果如下 3.代码如下 import java.math.BigDecimal;public class BigDecimalMethod3 {public static void main(String[] args) {//先定义了两个基本数据类型我们知道//0.1 0.2 在double 类型运行是不精确的double data1 0.1;double data2 0.2;//这个就更加直接了直接用BigDecimal中静态方法//将浮点数类型转变为BigDecimal类型BigDecimal b1 BigDecimal.valueOf(data1);BigDecimal b2 BigDecimal.valueOf(data2);//BigDecimal类中的实例方法 add()方法//将两个BigDecimal类型相加BigDecimal c b1.add(b2);//将BigDecimal类型转变为浮点数类型double a c.doubleValue();//1是为了表达a是浮点型不是字符串System.out.println(a1);}
} 运行代码如下 1.2.2 结合三种创建方法一起来分析一下。 第一种方式与第二种方式都是通过浮点型转变为字符串然后再通过构造器转入字符串来创建BigDecimal 类型的对象二者的区别在于有无创建Double对象第一种是通过创建对象得到实例方法 toString() 将浮点型转变为字符串而第二种没有创建Double对象直接用Double类的静态方法 toString() 将浮点型转变为字符串。这两种方式的历程是由 浮点数 - 字符串 - BigDecimal类型。 第三种是直接调用BigDecimal 类中的静态方法来创建对象历程是 浮点数 - BigDecimal类型。事实上第三种是第二种的封装。即JAVA中为了方便为了效率将第二种的长串的代码“封装”成第三种方法。 1.3 BigDecimal 类中的 valueOf(String str) 方法 通过传进字符串来创建方法由于上面有详细讲到就不多赘述了。 1.4 BigDecimal 类中的 add() 方法加减乘除的操作都是一样的就不多赘述了 两个BigDecimal 类型的对象进行相加得到总和。
代码如下 import java.math.BigDecimal;public class Text {public static void main(String[] args) {double data1 0.1;double data2 0.2;BigDecimal b1 BigDecimal.valueOf(data1);BigDecimal b2 BigDecimal.valueOf(data2);BigDecimal c b1.add(b2);System.out.println(c);}
} 运行结果 其他运算的方法 减法 subtract乘法 multiply除法 divide 其中 divide还可以指定小数点后的几位数。
代码如下 import java.math.BigDecimal;public class Text {public static void main(String[] args) {double data1 0.1;double data2 0.3;BigDecimal b1 BigDecimal.valueOf(data1);BigDecimal b2 BigDecimal.valueOf(data2);BigDecimal c b1.divide (b2,5);System.out.println(c);}
} 运行结果 假如0.1/0.3 不去指定位数的时候会报错。 import java.math.BigDecimal;public class Text {public static void main(String[] args) {double data1 0.1;double data2 0.3;BigDecimal b1 BigDecimal.valueOf(data1);BigDecimal b2 BigDecimal.valueOf(data2);BigDecimal c b1.divide (b2);System.out.println(c);}
}运行结果 1.5 BigDecimal 类中的 doubleValue() 方法 将 BigDecimal 类型转变为 double 类型。
代码如下 import java.math.BigDecimal;public class Text {public static void main(String[] args) {double data1 0.1;double data2 0.3;BigDecimal b1 BigDecimal.valueOf(data1);BigDecimal b2 BigDecimal.valueOf(data2);BigDecimal c b1.add (b2);double a c.doubleValue();System.out.println(a);}
} 运行结果如下