概述
#double的运算问题
我们都知道double类型的精度要比float的高一些,但double类型的精度就一定准确嘛?
程序运行结果并非0.6,这就是double在运算时的精度缺失问题,当然并不是所有的运算都会出现这个问题,但是只要出现就一定会影响运算结果,如果是经常跟数字打交道列如银行,一旦发生可是无法想象。
#double精度缺失的原因
为什么double会出先这个问题呢?这是由于我们输入的十进制的 double 类型的数据在进行计算的时候,计算机会先将其转换为二进制数据,然后再进行相关的运算。
然而在十进制转二进制的过程中,有些十进制数是无法使用一个有限的二进制数来表达的,换言之就是转换的时候出现了精度的丢失问题,所以导致最后在运算的过程中,会出现精度缺失问题。
这里就不大篇幅讲解进制转换的原理了;
#那么怎样解决这类问题呢?
普遍有两种方法可以解决,第一种是将其double类型数据运算后格式化 DecimalFormat然后再转为double类型
另一种方法是调用Math库里的一个类,也是比较常见的方法Bigdecimal
DecimalFormat df1 = new DecimalFormat("0.0000000000");
double height=1.5;
double low=1.4;
double c= Double.valueOf(df.format(height-low));
BigDecimal bigDecimal2 = new BigDecimal(Double.toString(2001299.32));
两种方法各有好处,格式化方法和Bigdecimal方法各种的用途JDK api里都有详细说明。
下一篇我会发一道2019年阿里的一道面试题,里面大体思路是让自己写一个sqrt()方法,网上的算法几乎都忽略了double在运算时的精度缺失问题,所以根本无法得出正确答案,也不知道他们运行过没有…
最后
以上就是机灵犀牛为你收集整理的JAVA中double在运算时的精度缺失问题的全部内容,希望文章能够帮你解决JAVA中double在运算时的精度缺失问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复