16.10.17学到的Java知识

1.

例:3-2.6==0.4的值是什么?可能乍一看,感觉是返回TRUE,因为3-2.6=0.4,0.4==0.4;所以返回TRUE。

 

然而,上面分析在JAVA中是错的。

 

由于浮点数的运算在JAVA中是不精确的,所以可以看出3-2.6=0.39999999999999;所以很明显3-2.6==0.4返回false。

 

 

 

 

问题来了,浮点数为什么在JAVA中运算不精确呢?

 

初步了解,与浮点数在计算机中的表示有关。

 

 

 

(使用BigDecimal,一个参数是String类型,一个参数是Double类型的区别)

 

经过询问度娘,知道:“这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。
”,“精度问题也就由此产生,许多数都是无法在有限的n内完全精确的表示出来的,我们只能利用更大的n值来更精确的表示这个数

”,于是乎,浮点数的表示都不是最精确的,那么,很明显,浮点数的运算结果也不是不精确的结果。

 

而解决这个问题的方法(即浮点数该怎么运算才能更加精确呢?)就是使用BigDecimal类。

 

 

 

 

注意用String类型的参数进行初始化。

 

在此附上BigDecimal类的相关知识:

“BigDecimal一共有4个构造方法:

 

BigDecimal(int) 创建一个具有参数所指定整数值的对象。

BigDecimal(double) 创建一个具有参数所指定双精度值的对象。

BigDecimal(long) 创建一个具有参数所指定长整数值的对象。

BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

 

BigDecimal 的运算方式 不支持 + - * / 这类的运算 它有自己的运算方法:

 

BigDecimal add(BigDecimal augend) 加法运算

BigDecimal subtract(BigDecimal subtrahend) 减法运算

BigDecimal multiply(BigDecimal multiplicand) 乘法运算

BigDecimal divide(BigDecimal divisor) 除法运算”

 

 

 

2.

重新看老师的课件,发现这个东东挺有用的。

 

 

 

posted @ 2016-10-17 22:21  Kefi123  阅读(184)  评论(0编辑  收藏  举报