为什么小数java会不精确呢???

为什么会不精确???

因为0.1 和 0.2 在转换为二进制时就发生了一次精度丢失,而对于计算后的二进制又有一次精度丢失 。因此,得到的结果是不准确的。

在 64 位的二进制中,符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度。

实际上,不是运算本身会出错,而是计算机根本就不能精确的表示很多数,比如0.1这个数。

计算机是用一种二进制格式存储小数的,这个二进制格式不能精确表示0.1,它只能表示一个非常接近0.1但又不等于0.1的一个数。

并且你会发现有时候的计算结果是准确的。

其实,这只是Java语言给我们造成的假象,计算结果其实也是不精确的,但是由于结果和0.2足够接近,在输出的时候,Java选择了输出0.2这个看上去非常精简的数字,而不是一个中间有很多0的小数。

在误差足够小的时候,结果看上去是精确的,但不精确才是常态。

怎么处理计算不精确???
 

减小精度。大部分情况下,我们不需要那么高的精度,可以四舍五入,或者在输出的时候只保留固定个数的小数位。
进行转换。如果真的需要比较高的精度,可以将小数转化为整数进行运算,运算结束后再转化为小数。
使用十进制的数据类型。但运算更准确,效率比较低。