5-3. 浮点类型

举报
数据分析与统计学之美 发表于 2021/09/28 18:01:00 2021/09/28
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。