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.
重新看老师的课件,发现这个东东挺有用的。