【double精度缺失 _spring 】 | IT修真院·坑乎
问题已收录 double精度缺失
我也踩过这个坑( 1 )
已统计您的踩坑,无需重复点击
回答(1)
spring
详细描述
错误截图
编辑于2024-11-14
  • [深圳|结业弟子]JAVA-娄文彬
    0

    float和double类型主要是为了科学计算和工程计算而设计的。他们执行二进制浮点运算,这是为了在广泛的数字范围上提供较为精确的快速近似计算而精心设计的。然而,它们并没有提供完全精确的结果,所以我们不应该用于精确计算的场合。float和double类型尤其不适合用于货币运算,因为要让一个float或double精确的表示0.1或者10的任何其他负数次方值是不可能的(其实道理很简单,十进制系统中能不能准确表示出1/3呢?同样二进制系统也无法准确表示1/10)。


    就是说,计算机进行计算的时候是用二进制计算的,这点毋庸置疑,然后,二进制小数 怎么转换成 十进制数字呢?

    十进制转二进制是除以2取余,得到二进制数


      十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。 

    比如说0.9,用二进制表示:

    0.9*2=1.8  取整数部分 1 

    0.8(1.8的小数部分)*2=1.6  取整数部分 1 

     0.6*2=1.2  取整数部分 1 

    0.2*2=0.4  取整数部分 0 

    0.4*2=0.8  取整数部分 0 

    0.8*2=1.6 取整数部分 1 

    0.6*2=1.2  取整数部分 0 

    。。。。。

    最后的出来的数1110010.......,一直循环下去

    这个二进制数是一直循环的,最终会因为double和float的精度问题截止,然后转换为十进制的数字就变成上面显示的那样了


    编辑于2018-06-29