5-3. 浮点类型
【摘要】 Java系列第五课
一、关于浮点型数据类型:
- float单精度【4个字节】
- doub1e双精度【8个字节,精度较高】
1、double的精度太低【相对来说的】,不适合做财务软件。
财务涉及到钱的问题,要求精度较高,所以SUN公司在基础SE类库当中,为程序员准备了精确度更高的
类型,只不过这种类型是一种引用数据类型,不属于基本数据类型,它是:java.math.Bigdecimal。
2、其实Java程序中,SUN提供了一套庞大的类库,java程序员是基于这套基础的类库,来进行开发的。所以要知道java的SE类库的字节码在哪儿?要知道java的SE类库的源码在哪儿?
SE类库的字节码在哪儿 E:\Java\java\jre\lib\rt.jar
SE类库的源码在哪儿 E:\Java\java\src.zip
下面这张图你可以很清楚知道,什么是字节码。
3. 需要注意的地方
- double和float在计算机内部二进制存储的时候存储的都是近似值。
- 在现实世界当中有一些数字是无限循环的,例如:3.333333333333333333333…计算机的资源是有限的,用有限的资源存储无限的数据只能存储近似值。
4. 在Java中,所有的浮点型字面值,都被当作double类型来处理。
要是想让某个字面值,被当作float类型来处理,需要在该字面值后面添加F/f。
5. 案例解析
public class Test {
public static void main(String[] args) {
// 10.0属于double类型的字面值;
// a属于double类型的变量;
// double类型的字面值 赋值给 double类型的变量 ;
// 不存在类型转换;
double a = 10.0;
System.out.println(a);
}
}
结果是:
另外一个例子:
public class Test {
public static void main(String[] args) {
// 12.3属于double类型的字面值 大容量
// b属于float类型的变量 小容量
// 大容量 赋值给 小容量
// 下面这种写法,会出现编译错误。
float b = 12.3;
System.out.println(b);
}
}
结果是:
解决办法一:加上强制类型转换符
public class Test {
public static void main(String[] args) {
// 加上强制类型转换符后,编译不会出错。
// 一般只有该字面值,超过float的取值范围的时候,
// 才会出现精度损失。
float b = (float) 12.3;
System.out.println(b);
}
}
结果是:
解决办法二:在字面值后面加一个f或者F,让系统直到这个字面值表示的是float类型
public class Test {
public static void main(String[] args) {
// “字面值+f/F”,这样系统会把12.3F,
// 当作一个float类型的数据来看待。
// 这里不存在类型转换。
float b = 12.3F;
System.out.println(b);
}
}
结果是:
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)