16.10.17学到的Java知识

探讨了Java中浮点数运算的不精确性及其原因,并介绍了如何使用BigDecimal类来进行精确的浮点数运算。

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.

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

 

 

 

转载于:https://www.cnblogs.com/haojun/p/5971512.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值