美文网首页
Java基本类型之浮点类型

Java基本类型之浮点类型

作者: Tinyspot | 来源:发表于2023-06-28 20:42 被阅读0次

1. 精度

浮点类型是不精确存储的

示例:

@Test
public void decimalTest() {
    // 0.1 + 0.2 = 0.30000000000000004
    System.out.println("0.1 + 0.2 = " + (0.1 + 0.2));

    double d = 0.1 + 0.2;
    BigDecimal decimal = new BigDecimal(d);
    // decimal: 0.3000000000000000444089209850062616169452667236328125
    System.out.println("decimal: " + decimal);

    System.out.println("new BigDecimal(0.1): " + new BigDecimal(0.1));
}
@Test
public void decimalTest() {
    for (int i = 1; i <= 9; i++) {
        double d = Double.parseDouble("0." + i);
        System.out.println(d);
        BigDecimal bd = new BigDecimal(d);
        System.out.println(bd);
    }
    // 能正常表示的只有 0.5
}

2. 二进制能准确表示的小数

@Test
public void binaryDecimal() {
    int limit = 9999;
    int length = String.valueOf(limit).length();

    System.out.println("0.0001~0.9999之间可以使用二进制来准确表示的小数有:");

    for (int i = 1; i <= limit; i++) {
        int num0 = length - String.valueOf(i).length();

        StringBuilder value = new StringBuilder("0.");
        for (int j = 1; j <= num0; j++) {
            value.append("0"); // 缺失的补0
        }
        value.append(i);

        BigDecimal db = new BigDecimal(Double.parseDouble(value.toString()));
        // 比较小数位数
        if (db.scale() <= length) {
            System.out.println(db);
        }
    }
}

3. 求整数的位数

方式一:log函数

/*
 * 求整数的位数
 * Math.log10(double)
 * 对数:log10(100) = 2 等价 10^2=100
 * Math.log10(9999) 从整型到浮点类型的转换可以隐式进行
 *
 * Math.ceil(double) 向上取整
 */
int limit = 999;
System.out.println(Math.log10(limit));
int len = (int) Math.ceil(Math.log10(limit));

// 其他
System.out.println(Math.ceil(1.01) + ", " + Math.ceil(1.8) + ", " + Math.ceil(-1.2) + ", " + Math.ceil(-1.8));

方式二:转成字符串求长度

int limit = 999;
int length = String.valueOf(limit).length();

4. 扩展问题

float 类型在Java中占用4字节,long类型在Java中占用8字节,为什么float类型的取值范围比long类型的取值范围还大?

分析:
float 的指数取值范围为-126~127,即 float的取值范围为-2^128 ~ +2^128
long 类型范围 -2^63 ~ 2^63-1
double 的取值范围 -2^1024 ~ +2^1024

类 型 符 号 位 指 数 域 有效位数域(小数位)
float 1位(第31位) 8位(第23~30位) 23位(第0~22位)
double 1位(第63位) 11位(第52~62位) 52位(第0~51位)

说明:
符号位有两个取值,0为正,1为负

相关文章

  • java 基本语法

    基本数据类型 Java种有4类共8种基本类型 需要注意 java中默认的浮点类型是double类型,float类型...

  • Java基本数据类型——浮点数、char类型和布尔类型

    Java中的基本数据类型除了四种整型外,还有两种浮点类型、一种char类型和一种布尔类型。 Java中的浮点类型 ...

  • Java基础: 基本类型和字符串对象

    1、基本类型 Java的基本类型有整型、浮点型、字符型和布尔型。整型:byte、short、int、long浮点型...

  • Java入门:数据类型

    Java数据分类两大类型: 基本数据类型 引用数据类型 基本数据类型 整数类型 字符类型 浮点类型 布尔类型 引用...

  • 个人整理-第三章

    java 8种数据类型: 4种基本类型: 2种浮点类型 char 类型 boolean类型 常量定义: 注意: f...

  • Java基本语法

    java基本数据类型:整数类型、小数(浮点)类型、布尔类型、字符类型 整数类型: byte占用内存一个字节 范围...

  • C语言基础

    数据类型 基本数据类型 java基本数据类型 浮点型 字符型 boolean true/false C的基本数据类...

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

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

  • 数据类型和Max+1

    java基本数据类型 整数类型 浮点类型 字符类型 布尔类型 jvm中没有任何供boolean值专用的字节码指令b...

  • 七:Java基础入门-浮点类型

    1:浮点类型概述 浮点类型用于表示小数的数据类型。 浮点类型原理:也就是二进制科学级数法。 Java的浮点类型有f...

网友评论

      本文标题:Java基本类型之浮点类型

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