浮点型(Floating Point Number)

浮点型(Floating Point Number)

        浮点型包括float和double类型,java语言默认的是double类型,浮点型说直接一点就是用来表示小数的,带有小数点的!

类型占用空间范围
float4个字节- 3.403E38 ~ 3.403E38
double8个字节-1.798E308 ~ 1.798E308

老李说明:

        上述表格中范围 3.403E38指的是科学计数法,E38指的是10的38次幂(次方),即3.403乘10的38次方。

java浮点类型常量的表示形式

        (1) 十进制数的形式,例如:        0.314        3.14        314.0        

        (2) 科学计数法的形式,例如:        3.14e0(3.14乘10的0次幂)        3.14E2(3.14乘10的平方)        3.14E-2(3.14乘10的负2次方)

代码示例

double d1 = 314E4; // 表示:314 × 10 ^ 4(10的四次方)----> 3140000.0
double d2 = 314e-3; // 表示:314 × 10 ^ (-3) ----> 0.314

浮点型的说明     

        1. float类型又被称作单精度类型,可以精确到7位有效数字。

        2. double类型又被称作双精度类型,数值精度约是float类型的2倍。

        3. 浮点常量默认的类型是double类型,绝大多数的应用程序都采用double类型。想要使用float类型需要在后面加上F或者f。

        4. 浮点型是不精确的,不要用于比较!

浮点型是存在舍入误差的,具体的浮点数字是不能够精确表示的!对于普通的科学工程计算,浮点型的精度是足够的。但是对于精度要求非常高的商业计算,需要使用BigDecimal来计算比较!

代码示例

/**
* float类型常量的写法以及变量的声明
* java语言默认的浮点型是double
* 想要使用float类型的数值时需要在后面加上一个F/f,如果不加只是声明float,则默认仍然时double
*/

float f = 3.14F; // 想要float类型赋值时需要在后面加F/f 
// 可以在浮点数值的后面添加D/d,来清楚知道是double类型,初学者这样做可以时刻提醒自己!
double d1 = 3.14;
double d2 = 3.14D; // 提示自己是double类型


/**
* 浮点型数据的比较,比较不精确
*/
// 比较一
float f1 = 0.01F;
double d3 = 1.0 / 100; // "/" 代表计算机中的除号
System.out.println(f1 == d3); // 比较f1和d3的数值是否相等 结果:false 不相等

// 比较二
float f2 = 123456789f;
float f3 = f2 + 1;
// 判断语句if-else(如果怎样...否则...),后续会给大家讲条件语句的!
if(f2 == f3){
    System.out.println("f2 == f3"); // 输出的结果是f2 == f3
}else{
     System.out.println("f2 != f3"); // "!=" 表示不等于
}

        在运行上面代码,浮点型数据比较的时候,比较一的示例中,逻辑上0.01和 1.0/100 = 0.01的数值是相等的,但是代码实际运行的时候,这两者是不相等的!因为浮点数一般都存在舍入误差,大多数数字都无法精确的表示,例如,0.1,0.01等。它的结果只是无限的接近,但是并不等于!所以不是所有的小数都可以精确的用二进制浮点数表示。比较二的示例中,逻辑上123456789和123456789 + 1 是不相等的,但是实际代码运行的时候,输出结果却是相等的。因为浮点数的精确表示是有限的,所以超过一定范围就会失效!

精确比较的类

        java.math 包下面有两个可以精确比较的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。那另一个BigDecimal就是实现了任意精度的浮点数运算!

        这里我为大家查找一下官当文档!当然我个人还是会使用里面的具体方法,只是为大家展示一下,这个类下面都有什么方法,可以帮助大家快速学会方法并且实现代码!

1. 遇到某个包下面不会使用的方法的时候,可以阅读文档,这里以BigInteger为例。

2. 向下翻,查找每个方法的使用和使用说明,举两个大家比较熟悉的方法:绝对值和除法

3. 熟悉代码的语法后,我们就可以自己动手编写代码了!这里我暂时不给大家演示了,像类以及对象,方法等后续为大家讲解清楚后再演示给大家。这样更加清晰!

易犯错误

        一定不要使用浮点数进行比较!切记!切记!切记!很多freshman理论还没有弄清楚再或者是有工作经验的程序员都爱犯这个错误,当然我也是犯过这个错误的,所以提醒大家下。想要实现精度比较请大家使用BigInteger和BigDecimal类!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsj-happiness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值