我是靠谱客的博主 机灵犀牛,最近开发中收集的这篇文章主要介绍JAVA中double在运算时的精度缺失问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#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在运算时的精度缺失问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部