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);
}
既然浮点数运算不准确,那么如何比较呢?
建议不使用浮点数做相关比较,如果非要用,一般认为:判断两个浮点数之差的绝对值是否小于一个很小的数,那么基本这两个浮点数相等:
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
}
本节阅读完毕!
(分享)