• 3.26Java浮点型(floatingpoint)常量、变量


    3.26Java浮点型(floating-point)常量、变量

    本章内容

    • 浮点型变量

    • 浮点型常量


    浮点型数据

    • float

    • double

    float

    特点:

    1. 单精度类型

    2. 占用4个字节

    3. 尾数可以精确到7位有效数字

    4. float类型数值要加'f'or'F'后缀

    double

    特点:

    1. 双精度型

    2. 占用8个字节

    3. 数值精度约是float类型的两倍

    4. 绝大部分应用程序都采用double类型

    5. 浮点型常量默认类型也是double

    6. 也可以在浮点数值后面加'D'or'd'明确其为double类型

    Java浮点型常量的两种表示形式
    • 十进制数形式。如:3.14 314.0 0.314

    • 科学计数法形式。如:314e2(e2相当于10^2) 314E2 314E-2(10^-2)

    浮点数的重要特性:不精确,没法精确。因为区间内小数是无限的

    实例:

    /**
    * TestFloating-pointType
    * @author Lucifer
    */
    public class TestPrimitiveData_TypeNo2 {
       public static void main(String arguments[]){
           float first = 3.14F;
           System.out.println(first);
           double second = 6.28;
           double third = 628E-2;
           System.out.println(second);
           System.out.println(third);

           /*
           0.1f从数学上算应该是=1/10的,但是结果是false。说明不精确
           浮点数是不精确的,一定不要用于比较!
            */
           float f = 0.1f;
           double d = 1.0/10;
           double c = 1/10;
           System.out.println(f==d); //结果为false。'=='是比较符号
           System.out.println(f==c); //结果为false
           
                   float d1 = 423432423f;
           float d2 = d1 + 1;
           if(d1==d2){
               System.out.println("d1==d2"); //输出结果为d1==d2
          }else{
               System.out.println("d1!=d2");
          }
      }
    }

    特点:

    上面的语句实际上d1是!=d2的但是却输出d1==d2
    其原因是:
    字长有限,浮点数能够表示的数也是有限的,所以数是离散的。
    浮点数一般都存在舍入误差,很多数字无法精确表示(如:0.1),其结果只能是接近,但不等于。
    二进制浮点数不能精确的表示0.1、0.01、0.001这样的10的负次幂数。
    不是所有的小数都能可以精确到二进制浮点数表示
    所以千万不要用浮点数进行比较
    如何比较浮点数的大小?

    比较方法:

    如果想比较两个类用Java.math包下面的两个类:

    • BigInteger

    • BigDecimal

    这两个类可以处理任意长度的数值。

    BigInteger:

    实现了任意精度的整数运算

    BigDecimal:

    实现了任意精度的浮点运算

    金融领域里面计算常用

    实例:

    public class TestPrimitiveDate_TypeNo2{
       public static void main(String arguments[]){
                   /*
           使用精确的浮点运行,推荐使用:BigDecimal
            */
           System.out.println("##########");
           BigDecimal bd = BigDecimal.valueOf(1.0);
           bd = bd.subtract(BigDecimal.valueOf(0.1));
           bd = bd.subtract(BigDecimal.valueOf(0.1));
           bd = bd.subtract(BigDecimal.valueOf(0.1));
           bd = bd.subtract(BigDecimal.valueOf(0.1));
           bd = bd.subtract(BigDecimal.valueOf(0.1));
           System.out.println(bd); //0.5
           System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1); //0.5000000000000001

           BigDecimal bd2 = BigDecimal.valueOf(0.1);
           BigDecimal bd3 = BigDecimal.valueOf(1.0/10.0);

           System.out.println(bd2.equals(bd3));
           System.out.println(bd2 == bd3);
           
      }
    }
    /*
    这里面涉及到了equals和'=='的区别
    因为同一的对象不同的打印方法的得到的结果不一样
    */

    char:

    用单引号引用就是char类型是Unicode编码

    String:

    • 用双引号表示就是String类型

    • String是一个字符的序列,本质是字符的数组

    It's a lonely road!!!
  • 相关阅读:
    边缘提取二—实例 行远
    Exp2后门原理与实践
    Exp3免杀原理
    PostgreSQL 查询被锁阻塞的连接
    PostgreSQL中的数组与Any
    [Contest on 2022.4.12] 我又来水博客了
    2022 省选游记
    [省选联考 2020 A 卷] 组合数问题
    [学习笔记] 斯特林数
    LOJ 6515 「雅礼集训 2018 Day10」贪玩蓝月
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14584954.html
Copyright © 2020-2023  润新知