Logo

郎哥编程

浮点类型

2019-12-06 1260

前面介绍的整型用于存储整数,但现实问题中除了整数,还有小数。Java语言也提供了针对小数的存储类型,分别是float类型和double类型。

Java语言的浮点类型有两种不同的表示形式:十进制数和科学计数法。十进制数形式,由数字和小数点组成,且必须有小数点,如0.123、12.85、26.98等;科学计数法形式,如:2.1E5、3.7e-2等。其中e或E之前必须有数字,且e或E后面的指数必须为整数。

科学计数法

一种简化计数的方法,对于位数较小的数值,科学计数法没有什么优势,但对于位数较多的数值其计数方法的优势就非常明显了。例如:光的速度是300,000,000米/秒,全世界人口数大约是6,100,000,000。类似光的速度和世界人口数这样大数值的数,读、写都很不方便,仔细观察上面的两个数值,光的速度可以写成3*10^8米/秒,全世界人口数可以写成6.1*10^9。这种计数方法就是科学计数法,用Java语言科学计数法表示光速是3E8,世界人口数大约是6.1E9。

一个较大的数值可以用下面的方式来表示:

a * 10^n (1<=a<10,n为整数)

其中,a是该数值的有效位数,有效位数从左边第一个不是0的数起,到末尾数字为止,称为有效数字(最后一位的0也要数)。例如:光速是3E8,其有效数字是1位,值是3;世界人口数大约是6.1E9,其有效数字是2位,值是6.1。

n是该数值的整数部分减1的正整数。

一个较小的数值可以用下面的方式来表示:

a * 10^-n (1<=a<10,n为整数)

a的取值同上面相同,n的取值为原数中左边第一个不为0的数字前面所有的0的个数(包括小数点前面的0)。

在Java语言中,浮点类型有float和double两种,分别代表单精度和双精度的数值。精度是指描述一个数值的准确程度,在数学运算中,经常会用到近似数,近似数与原数值非常相近,但又不完全符合原数值,只能说在某种程度上近似。精度与近似数相似,也是用一个与原数值非常相近的数代替原来的数值。

前面说过存储一个数值所用的字节越多,其精度越高,数值范围也越大。由此看来,精度与存储字节数密切相关,float类型的存储空间是4个字节,其表示的值范围约为10^-38到10^38,double类型的存储空间是8个字节,其表示的值范围约为10^-308到10^308,float存储数值的精度和范围要小于double存储数值的精度和范围。因此,float是单精度数值,double是双精度数值。

image.png          

                                  

浮点型变量占用的存储空间

float变量可按如下方式声明:

float  price = 12.35f;
public  float  average = 89.2f;

double变量可按如下方式声明:

double  price = 12.35;
public  double  average = 89.2;

数值赋值给float变量时,数值尾部要加上小写“f”或大写“F”声明为float数值,不然编译器会给出“可能损失精度的错误”。因为在Java语言中,带小数的数值默认为是double类型,double类型转换为float类型,自然要损失精度了。

案例1:在PBaseUnit46项目unit46包下创建FloatSample类,在FloatSample类下分别声明price、average局部变量并赋值,price的数据类型为float,average的数据类型为double,然后输出price与average的值到控制台。代码如下:

/** 
* @Title: FloatSample.java 
* @Package unit46 
* @Description: Java基础知识课程案例
* @author 编程训练营 
* @date 2019年11月30日 
* @version V1.0 
*/ 
 
package unit46;
 
/** 
* @ClassName: FloatSample 
* @Description: 基本数据类型(浮点类型)案例1
* @author 编程训练营 
* @date 2019年11月30日 
* 
*/
 
public class FloatSample {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       // 声明局部变量price,数据类型为float
       float price = 12.35f;
       // 声明局部变量average,数据类型为average;
       double average = 89.2;
      
       // 输出静态变量width的值
       System.out.println("局部变量price的值为:" + price);  
       // 输出静态变量height的值
       System.out.println("局部变量average的值为:" + average);  
    }
 
}

程序执行结果如下图所示:


image.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论