美文网首页我的程序员修炼日记
Java浮点类型精度丢失问题

Java浮点类型精度丢失问题

作者: 一岁一枯荣啊 | 来源:发表于2019-10-17 23:02 被阅读0次

一、问题

public class TsDom {
    public static void main(String[] args) {
        double dou1 = 0.1;
        double dou2 = 0.2;
        System.out.println(dou1 + dou2);
        //结果为0.30000000000000004
    }
}

二、分析我们把十进制的0.3转为二进制

小数类型转化为二进制方法: 小数乘以2得到b,取b的整数位,如果b为1.0结束计算得到结果。

  • 0.3 x 2 = 0.6 ------取整数部分 0

  • 0.6 x 2 = 1.2 ------取整数部分 1

  • 0.2 x 2 = 0.4 ------取整数部分 0

  • 0.4 x 2 = 0.8 ------取整数部分 0

  • 0.8 x 2 = 1.6 ------取整数部分 1

  • 0.6 x 2 = 1.2 ------取整数部分 1

  • 0.2 x 2 = 0.4 ------取整数部分 0

  • 0.4 x 2 = 0.8 ------取整数部分 0

  • 0.8 x 2 = 1.6 ------取整数部分 1

    ……. 无限循环..........循环体1001

结果为 0.0110011001100110011001100………..

十进制转二进制,有些十进制数是无法使用一个有限的二进制数来表示。所以造成运算丢失精度

三、解决(BigDecimal)

public class TsDom {

    public static void main(String[] args) {
        double dou1 = 0.1;
        double dou2 = 0.2;
        System.out.println(dou1 + dou2);
        //结果为0.30000000000000004
        //BigDecimal
        BigDecimal bigDecimal1 = new BigDecimal(Double.toString(dou1));
        BigDecimal bigDecimal2 = new BigDecimal(Double.toString(dou2));
        System.out.println(bigDecimal1.add(bigDecimal2).doubleValue());
        //0.3
    }

}

相关文章

  • Java浮点类型精度丢失问题

    一、问题 二、分析我们把十进制的0.3转为二进制 小数类型转化为二进制方法: 小数乘以2得到b,取b的整数位,如果...

  • Java绝对基础知识你还记得多少:浮点型,字符型,布尔型

    浮点类型 java语音包含两种浮点类型,分别为单精度浮点类型和双精度浮点类型,各种自用float和double关机...

  • 【JAVA基础】精度问题

    1. 问题由来 浮点型变量在进行计算的时候会出现丢失精度的问题,如: Java中进行浮点数运算的时候,会出现丢失精...

  • JAVA浮点类型数据计算

    摘要 Java浮点数据类型在内存中存储会出现精度丢失的情况,因此涉及浮点数据类型的计算需使用BigDecimal类...

  • iOS 浮点类型精度丢失问题

    苹果提供的解决方案:NSDecimalNumber 针对浮点类型计算精度问题提供的计算类,基于十进制的科学计数法来...

  • Java 后端知识点

    Java 基本类型 八大基本类型,对应数值范围 浮点数丢失精度 集合 List、Set、Map 线程安全保障 Ha...

  • 关于浮点型精度问题的一些理解

    这是一篇关于浮点型精度的文章,大致会从三个大的问题入手,去解析精度问题。 字符串转浮点型出现精度丢失 浮点型和浮点...

  • iOS 处理浮点类型精度丢失问题

    1. 问题: 在iOS开发中,我们经常要使用浮点类型去接收后台返回过来的的数据,这时往往会遇到精度问题,特别是在开...

  • 小问题整理

    1.iOS11数字精度问题 /*! @brief 修正浮点型精度丢失 @param str 传入接口取到的数据 @...

  • C 浮点数

    浮点数存储带来的问题 问题背景 计算机中浮点数(float或double类型)都有精度范围,对于超出精度范围的浮点...

网友评论

    本文标题:Java浮点类型精度丢失问题

    本文链接:https://www.haomeiwen.com/subject/okjbmctx.html