首页 专题 文章 代码 归档
Java 浮点数运算
2020.02.25 11:58 2020.03.12 20:12

1. 浮点数运算

浮点数除了四则运算之外,并不能做位运算和移位运算。

另外,浮点数虽然表示的范围很大,但是并不能做精确的运算。

比如:

private static void test03() {
    double a = 1.0 / 10;
    double b  = 1 - 9.0 / 10;
    System.out.println("a = " + a);
    System.out.println("b = " + b);

}

截图-1582599588

既然浮点数运算不准确,那么如何比较呢?

建议不使用浮点数做相关比较,如果非要用,一般认为:判断两个浮点数之差的绝对值是否小于一个很小的数,那么基本这两个浮点数相等:

private static void test03() {
    double a = 1.0 / 10;
    double b = 1 - 9.0 / 10;
    System.out.println("a = " + a);
    System.out.println("b = " + b);

    double r = Math.abs(a - b);
    // 判断绝对值是否足够小:
    if (r < 0.00001) {
        System.out.println("相等");
    } else {
        System.out.println("不相等");
    }

}

2. 类型提升问题

什么是类型提升问题?

前面说了,Java8种基本类型,及其占用空间:

boolean 8bit/1byte

byte 8bit/1byte

char 16bit/2byte

short 16bit/2byte

float 32bit/4byte

int 32bit/4byte

long 64bit/8byte

double 64bit/8byte

Java自动类型转换:

1、两种类型是彼此兼容的 2、转换的目标类型占得空间范围一定要大于转化的原类型


正向过程:由低字节向高字节自动转换

byte->short->int->long->float->double

逆向过程:使用强制转换,可能丢失精度。

int a=(int)3.14;

private static void test04() {
    int a = (int) 3.14;
    System.out.println("a = " + a);//a = 3
}
本节阅读完毕! (分享
二维码图片 扫描关注我们哟