zoukankan      html  css  js  c++  java
  • Java中float和double的精度

    比较基本类型double和float和某一个数是否相等的时候,不要用==或>=或<=,因为double和float都是有精度问题的,计算机只能保存一定位数的小数,这就会存在精度问题。

    下面我们看一下java中float和double能够比较到小数后几位:

    代码实现:

    public class Main {
        public static void main(String[] args) {
            float f6 = 1.000003f;//6位小数位,总共7位
            float f_8 = 10.000003f;//6位小数位,总共8位
            double d15 = 1.000000000000003;//15位小数位,总共16位
            double d_17 = 10.000000000000003;//15位小数位,总共17位
            
            float f7 = 1.0000003f;//7位小数位,总共8位
            float f_9 = 10.0000003f;//7位小数位,总共9位
            double d16 = 1.0000000000000003;//16位小数位,总共17位
            double d_18 = 10.0000000000000003;//16位小数位,总共18位   
            
            float f8 = 1.00000003f;//8位小数位,总共9位
            float f_10 = 10.00000003f;//8位小数位,总共10位
            double d17 = 1.00000000000000003;//17位小数位,总共18位
            double d_19 = 10.00000000000000003;//17位小数位,总共19位        
            
            System.out.println(f6==1);
            System.out.println(d15==1);
            System.out.println("------------------");
    
            System.out.println(f7==1);
            System.out.println(d16==1);
            System.out.println("------------------");
    
            System.out.println(f8==1);
            System.out.println(d17==1);
            System.out.println("------------------");
    //-----------------------------------------------
            System.out.println(f_8==10);
            System.out.println(d_17==10);
            System.out.println("------------------");
    
            System.out.println(f_9==10);
            System.out.println(d_18==10);
            System.out.println("------------------");
    
            System.out.println(f_10==10);
            System.out.println(d_19==10);
            System.out.println("------------------");
        }
    }

    输出结果:

    false
    false
    ------------------
    false
    false
    ------------------
    true
    true
    ------------------

    ------------------------------------------

    false
    false
    ------------------
    true
    true
    ------------------
    true
    true
    ------------------

    再举一个案例:

    public class Main {
        public static void main(String[] args) {
            float f6 = 10000003.87f;//整数位8位,总共10位
            float f_8 = 100000003.87f;//整数位9位,总共11位
            
            System.out.println(f6==10000003);
    
            System.out.println(f_8==100000003);
        }
    }

    输出结果:

    false

    true

    上面两个案例说明,float和double的精确度是按照整体位数来的,并不是只是考虑小数部分。根据显示结果可以看出,float只能精确8位,double可以精确比较到17位,超出比较的精度就会得到错误的结果。

  • 相关阅读:
    再也不用为word 中表达式的上标和下标发愁了
    创建链接
    ps钢笔工具隐藏的知识。
    学Ps个人遇到的小细节
    新手琢磨ps,学问深着呢。。
    数据库2012终于知道数据库攻击注入参数
    想脱离鼠标,不想要鼠标就只想用键盘完成所有编程,你说可能吗?
    vs2013中的快捷键
    如何在C/C++中动态分配二维数组【转载】
    转载:C++的那些事:表达式与语句
  • 原文地址:https://www.cnblogs.com/loren-Yang/p/7535669.html
Copyright © 2011-2022 走看看