Java 整型、浮点型(Day8)

55 阅读3分钟

整型

整数类型:byte、short、int、long

  • Java中各整数类型有固定的表数范围和长度,不受具体操作系统影响,以此保证Java程序的可移植性
类型占用存储空间表数范围
byte1字节=8bit位-128~127
short2字节-2e15~2e15-1
int4字节-2e31~2e31-1(约21亿)
long8字节-2e63~2e31-1
  • 定义long类型的变量,赋值时需要以lL 作为后缀
  • Java程序中变量通常声明为int型,除非不足以表示较大的数,才会使用long
  • Java的整型常量默认为int型

知识补充:计算机存储单位

  • 字节(byte): 是计算机用于计算存储容量基本 单位,一个字节等于8 bit

  • 位(bit): 是数据存储的最小 单位。二进制数系统中,每一个0或1就是一个位,叫做bit(比特),其中8bit称为一个字节(byte)

  • 转换关系:

    • 8 bit = 1 byte
    • 1024 Byte = 1 KB
    • 1024 KB = 1 MB
    • 1024 MB = 1 GB
    • 1024 GB = 1 TB

浮点型

浮点类型:float、double

  • 与整数类型相似,Java浮点类型也有其固定的表数范围和字段长度,不受具体操作系统影响
类型占用存储空间表数范围
单精度float4字节-3.403E38~3.403E38
双精度double8字节-1.798E308~1.798E308
  • 浮点型常量有两种表示形式

    • 十进制数形式。如:2.36、3.59(必须有小数点)
    • 科学计数法形式。如:2.12E2、5.12e6等
  • float:单精度 ,尾数可以精确到7位有效数字,很多情况下,精度很难满足需求

  • double:双精度 ,精度是float的两倍,通常采用这种类型

  • 定义float类型的变量时,赋值时需要使用Ff 作为后缀

  • float类型表数范围大于long类型表数范围,但精度不高

  • Java的浮点型常量默认为double型

浮点型的精度说明

  • 并不是所有的小数都可以精确的使用二进制浮点数表示。二进制浮点数不能精确表示0.1/0.01/0.001这样的10的负次幂
  • 浮点类型float、double的数据不适合在不容许舍入误差 的金融计算领域。如需精确 的数字计算或保留指定位数的精度,需使用BigDecimal类
  • 测试
        System.out.println(0.1+0.2);
        // 结果:0.30000000000000004
        float f1=123123123f;
        float f2=f1+1;
        System.out.println(f1);
        // 结果:1.2312312E8
        System.out.println(f2);
        // 结果:1.2312312E8
        System.out.println(f1==f2);
        // 结果:true

案例

案例1:定义圆周率为3.14,分别求半径为1.2、2.5、6的圆的面积

class FloatDoubleTest{
    public static void main(String[] args) {
        double r1=1.2;
        double r2=2.5;
        int r3=6;
        double PI=3.14;
        double s1=PI*r1*r1;
        double s2=PI*r2*r2;
        double s3=PI*r3*r3;
        System.out.println("半径为1.2的圆的面积为:"+s1);
        System.out.println("半径为2.5的圆的面积为:"+s2);
        System.out.println("半径为6的圆的面积为:"+s3);
    }
}
/*结果:
半径为1.2的圆的面积为:4.521599999999999
半径为2.5的圆的面积为:19.625
半径为6的圆的面积为:113.03999999999999 */

案例2:摄氏温度与华氏温度换算,华氏温度为80度

class TemplateTest{
    public static void main(String[] args) {
        double f=80.0;
        double c;
        c=(f-32)/1.8;
        System.out.println("80华氏度为:"+c+"摄氏度");
    }
}
//结果:80华氏度为:26.666666666666664摄氏度