问题描述
- Java的double类型在运算时,结果有的时候不能精确显示。我知道是进制导致的。
-
下图讲解,我懂。
但是,在做题的时候.............
才发现,我也只能确定0.1不能被精确显示,具体该如何解这样的题呢?
其实我进一步思考了。我以为就看尾数是不是5。比如0.5、0.05。因为2的-x次方的尾数都是5。是5就能精确显示,不是就不能。但是后来发现.................
计算误差">
说明不能只靠最终结果来判断...............那该怎么判断啊?问题补充:我知道有BigDecimal这个类,我只可以用这个类避免精度问题。
但是我的问题就是如果做笔试题的时候,遇到这种挫科的问题(如第二幅图所示,刚刚图错了,不好意思哈~~呵呵),该如何找到正确的选项?
解决方案
对于float 和 double, 建议用BigDecimal进行运算。
import java.math.BigDecimal;
public class DoubleTest {
public static void main(String[] args) {
double d = 3.0d;
double f = 2.1d;
BigDecimal bd1 = new BigDecimal(Double.toString(d));
BigDecimal bd2 = new BigDecimal(Double.toString(f));
System.out.println("result=" + bd1.subtract(bd2));
}
}
解决方案二:
看看这篇文章就可以了。还是用BigDecimal类吧,我项目里面用的就是这个类,http://blog.csdn.net/xionglangs/article/details/50932565。
解决方案三:
有两个误差,一个是浮点本身的误差,一个是进制转换误差,能精确表示的小数必须可以分解为1/2^n的和,比如0.5 0.25 0.125 0.0625...,不是带5结尾。
另外还有浮点本身的误差,比如说10^10000+10^-10000相加,因为两者的数量级差异太大,所以第二个数会被舍去,如果计算10^10000+10^-10000-10^10000,那么结果可能是0,而不是10^-10000
时间: 2024-11-05 12:08:52