目录
一、浮点型简单介绍
二、代码演示说明
package t07_浮点类型_float_double;
/**
* 浮点数类型:float类型、double类型 ( 详细资料参考:IEEE-754标准 )
* 就是Java中的小数(是2进制小数)
* 1)精度(精确度)问题
* double 64位,后缀 D或d
* float 32位,后缀 F或f
* double的精度是float的两倍
* double 是常用浮点类型。一般只使用double计算浮点数
* 2)默认小数类型的字面量是:double类型(精度考虑)
* 3)计算误差,有舍入误差现象,浮点数不能进行精确计算
*
*/
public class TestFloatDouble {
public static void main(String[] args) {
// testFloat();//测试 float类型
// testDouble();//测试 double类型
// testOperation();//测试 浮点数运算
testScientificCounting();//测试 科学计数法
}
/**
* 科学计数法
* 科学记数法是一种记数的方法。
* 把一个数表示成a与10的n次幂相乘的形式(1≤|a|<10,n为整数),这种记数法叫做科学记数法。
* 科学记数法的形式是由两个数的乘积组成的。表示为a×10^b(aEb)
* 例如:19971400000000=1.99714×10^13。
* 计算器或电脑表达10的幂是一般是用E或e,也就是1.99714E13=19971400000000。
*
* 作用用途:
* 当我们要标记或运算某个较大或较小且位数较多时,用科学记数法免去浪费很多空间和时间。
*
* 百度百科地址:
* https://baike.baidu.com/item/科学记数法/1612882?fromtitle=科学计数法&fromid=756685&fr=aladdin#reference-[2]-793477-wrap
*/
private static void testScientificCounting() {
//pow方法:计算java中的次方
System.out.println(10*10 == Math.pow(10, 2));//true
System.out.println(0.01 == Math.pow(10, -2));//true
System.out.println(1E2 == Math.pow(10, 2));//true
System.out.println(1E-2 == Math.pow(10, -2));//true
double pi;
pi = 3.1415926535897932384626433832D;//double类型
double c = Math.sin(pi);
System.out.println(c);//1.2246467991473532E-16
//1.2246467991473532E-16 为科学计数法,它等于如下输出:
System.out.println(1.2246467991473532*Math.pow(10, -16));//1.2246467991473532E-16
System.out.println(0.12246467991473532*Math.pow(10, -15));//1.2246467991473532E-16
System.out.println(c>0);//true
//在百度百科的一组公式
/*
n"E"公式
3E4E5=30000E5=3E9
即aEbEc=aEb+c
6E-3E-6E3=0.006E-6E3
=0.000000006E3
=6E-6
*/
//科学计算法--->相关转换
System.out.println(0.000000006E3 == 6E-6);//true
System.out.println(0.000000006*10*10*10 == 6E-6);//true
System.out.println(0.000000006*Math.pow(10, 3) == 6E-6);//true
System.out.println(0.000006 == 6E-6);//true
System.out.println(0.000006 == 6*Math.pow(10, -6));//true
}
/**
* 浮点数运算
* 计算误差,有舍入误差现象,浮点数不能进行精确计算
*/
private static void testOperation() {
double pi;
pi = 3.1415926535897932384626433832D;//double类型
//计算误差,有舍入误差现象,不能进行精确计算
double d = 2.6;
System.out.println(d - 2);//0.6000000000000001
d = 3.0;
System.out.println(d - 2.9);//0.10000000000000009
double c = Math.sin(pi);
System.out.println(c==0);//false
//不精确的0
System.out.println(c);//1.2246467991473532E-16
//1.2246467991473532E-16 为科学计数法
//它等于 1.2246467991473532乘以10的负16次方
//写的明白点,也就是:0.12246467991473532乘以10的负15次方
//所以下面的比较为 true
System.out.println(c>0);//true
//判断c接近于0
System.out.println(c<0.0000000001);//true
}
/**
* double类型
*/
private static void testDouble() {
double pi;
float f;
//double类型
pi = 3.14D;
System.out.println(pi);//3.14
pi = 3.1415926D;
System.out.println(pi);//3.1415926
pi = 3.1415926535897932384626433832D;
System.out.println(pi);//3.141 5926 5358 9793
//float类型--->自动转 double类型
//因为默认小数类型的字面量是 double类型
//float--->double: 小类型到大类型,可以完成自动转换。
pi = 3.1415926535897932384626433832f;
System.out.println(pi);//3.141 5927 4101 2573 2
pi = 3.1415926535897932384626433832F;
System.out.println(pi);//3.141 5927 4101 2573 2
pi = 3.14f;
System.out.println(pi);//3.140 0001 0490 4175
pi = 3.14F;
System.out.println(pi);//3.140 0001 0490 4175
pi = 3.1415926f;
System.out.println(pi);//3.141 5925 0259 3994
pi = 3.1415926F;
System.out.println(pi);//3.141 5925 0259 3994
}
/**
* float类型
*/
private static void testFloat() {
float f;
//编译错误。因为默认小数类型的字面量是 double类型
//没有加F或f,说明默认为double类型
//double--->float: 大类型到小类型,需进行强制转换
//f = 3.1415926535897932384626433832;
f = (float)3.1415926535897932384626433832;
System.out.println(f);//3.1415927
f = 3.1415926535897932384626433832f;
System.out.println(f);//3.1415927
f = 3.1415926535897932384626433832F;//后缀 F或f 都可以
System.out.println(f);//3.1415927
//valueOf(float f)
//float ff2 = Float.valueOf(2455.4941);//编译错误,因为默认小数类型的字面量是 double类型
float ff2 = Float.valueOf(2455.4941f);
System.out.println(ff2);//2455.4941
//f = 3.14;//编译错误
f = (float) 3.14;
System.out.println(f);//3.14
f = 3.14f;
System.out.println(f);//3.14
f = (float) 3.1415926;
System.out.println(f);//3.1415925
f = 3.1415926f;
System.out.println(f);//3.1415925
f = (float) 3.141592;
System.out.println(f);//3.141592
f = 3.141592f;
System.out.println(f);//3.141592
}
}