浮点型变量
浮点型常量
float
double
特点:
单精度类型
占用4个字节
尾数可以精确到7位有效数字
float类型数值要加‘f‘or‘F‘后缀
特点:
双精度型
占用8个字节
数值精度约是float类型的两倍
绝大部分应用程序都采用double类型
浮点型常量默认类型也是double
也可以在浮点数值后面加‘D‘or‘d‘明确其为double类型
十进制数形式。如:3.14 314.0 0.314
科学计数法形式。如:314e2(e2相当于10^2) 314E2 314E-2(10^-2)
浮点数的重要特性:不精确,没法精确。因为区间内小数是无限的
实例:
/**
* TestFloating-pointType
* @author Lucifer
*/
public class TestPrimitiveData_TypeNo2 {
public static void main(String arguments[]){
float first = 3.14F;
System.out.println(first);
double second = 6.28;
double third = 628E-2;
System.out.println(second);
System.out.println(third);
?
/*
0.1f从数学上算应该是=1/10的,但是结果是false。说明不精确
浮点数是不精确的,一定不要用于比较!
*/
float f = 0.1f;
double d = 1.0/10;
double c = 1/10;
System.out.println(f==d); //结果为false。‘==‘是比较符号
System.out.println(f==c); //结果为false
float d1 = 423432423f;
float d2 = d1 + 1;
if(d1==d2){
System.out.println("d1==d2"); //输出结果为d1==d2
}else{
System.out.println("d1!=d2");
}
}
}
特点:
上面的语句实际上d1是!=d2的但是却输出d1==d2
其原因是:
字长有限,浮点数能够表示的数也是有限的,所以数是离散的。
浮点数一般都存在舍入误差,很多数字无法精确表示(如:0.1),其结果只能是接近,但不等于。
二进制浮点数不能精确的表示0.1、0.01、0.001这样的10的负次幂数。
不是所有的小数都能可以精确到二进制浮点数表示
所以千万不要用浮点数进行比较
比较方法:
如果想比较两个类用Java.math包下面的两个类:
BigInteger
BigDecimal
这两个类可以处理任意长度的数值。
BigInteger:
实现了任意精度的整数运算
BigDecimal:
实现了任意精度的浮点运算
金融领域里面计算常用
实例:
public class TestPrimitiveDate_TypeNo2{
public static void main(String arguments[]){
/*
使用精确的浮点运行,推荐使用:BigDecimal
*/
System.out.println("##########");
BigDecimal bd = BigDecimal.valueOf(1.0);
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd); //0.5
System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1); //0.5000000000000001
?
BigDecimal bd2 = BigDecimal.valueOf(0.1);
BigDecimal bd3 = BigDecimal.valueOf(1.0/10.0);
?
System.out.println(bd2.equals(bd3));
System.out.println(bd2 == bd3);
}
}
/*
这里面涉及到了equals和‘==‘的区别
因为同一的对象不同的打印方法的得到的结果不一样
*/
char:
用单引号引用就是char类型是Unicode编码
String:
用双引号表示就是String类型
3.26Java浮点型(floating-point)常量、变量
原文:https://www.cnblogs.com/JunkingBoy/p/14584954.html