【Java】Java_07 浮点型

浮点型


类型


占用存储空间


表数范围


Float


4字节


-3.403E38~3.403E38


Double


8字节


-1.798E308~1.798E308

float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。

double表示这种类型的数值精度是float类型的两倍,又被称作双精度,绝大部分应用程序都采用double类型。

Java 浮点类型常量有两种表示形式

十进制数形式,例如:

3.14       314.0      0.314

科学记数法形式,如

314e2      314E2      314E-2

 double f = 314e2;  //314*10^2-->31400.0

 double f2 = 314e-2; //314*10^(-2)-->3.14

Float类型的数值有一个后缀F/f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D/d, 以明确其为double类型:

浮点类型float, double的数据不适合在不容许舍入误差的金融计算领域。
如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类

注:

主要理由:由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。

二进制浮点数不能精确的表示0.1,0.01,0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示

最好完全避免使用浮点数比较

public class TestFloatType{
    public static void main(String[] agrs){
        float a = 0.1f;
        double b = 1.0/10;
        System.out.println(a==b); //执行结果为false

        float c = 278390f;
        float e = c+1;
        if(c==e){
            System.out.println("c等于e");
        } else{
            System.out.println("c不等于e");
        }
        //执行结果为c不等于e
    }
}

大数值:

Java.math下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。

浮点数使用总结:

  1. 默认是double
  2. 浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
  3. 避免比较中使用浮点数
时间: 2024-11-03 21:38:46

【Java】Java_07 浮点型的相关文章

Java中浮点型数据Float和Double进行精确计算的问题

一.浮点计算中发生精度丢失  大概很多有编程经验的朋友都对这个问题不陌生了:无论你使用的是什么编程语言,在使用浮点型数据进行精确计算时,你都有可能遇到计算结果出错的情况.来看下面的例子. // 这是一个利用浮点型数据进行精确计算时结果出错的例子,使用Java编写,有所省略. double a = (1.2 - 0.4) / 0.1;System.out.println(a); 如果你认为这个程序的输出结果是“8”的话,那你就错了.实际上,程序的输出结果是“7.999999999999999”.好

java 复习 - 浮点型变量

浮点型有两种变量类型,即 float 和double package FloatTest;public class FloatTest { public static void main(String[] args) {  float f1 = 12.4523;//这一句编译时会报错.因为一个小数写在源代码中,系统默认其为double,double 精度比float 高,不能将高精度的数直接赋值给低精度变量.  //如果要解决此问题,在数值末尾加上F或者f.即float f1 = 12.4523

java float浮点型数据存储,丢失精度问题

java中float类型为4字节32位,内存中的存储遵循IEEE-754格式标准: 一个浮点数有2部分组成:底数m和指数e底数m部分:使用二进制数来表示此浮点数的实际值.指数e部分:占用8bit(1个字节)的二进制数,可表示数值范围为0-255.但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数.所以,float类型的指数可从-126到128.底数部分实际是占用24bit(3个字节)的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit. 所以一

Java千百问_06数据结构(025)_用二进制如何表示浮点型数值

点击进入_更多_Java千百问 1.用二进制如何表示浮点型数值 我们再了解二进制如何表达浮点型数值前,需要先了解用二进制如何表示整型数值:用二进制如何表示整型数值 由于计算机只认识0.1二进制,所以与表示整数一样,浮点数值最终也都会被解释为二进制机器码,与整型不同的是,所有由计算机储存的浮点类型,都是通过运算转换为十进制的,所以都是高度近似值,并不可能100%精确.具体规则如下: 遵循Ieee754标准(IEEE二进位浮点数算术标准) 首位均是符号位,1代表负,0代表正. 3.除去首位,用来表示

Java基础Day2

Java基础第二天 2.1回顾 第一个代码: /** 这是我的第一个java程序 @author zhang @version v1.0 */ publicclass HelloJava{ /* 1.源文件以.java结尾 2.源文件中可以有多个class声明的类 3.类中可以有主方法(即main()方法),其格式是固定的:public static void main(String[]args){} 4.main()方法是程序的入口,方法内是程序的执行部分. 5.一个源文件中只能有一个声明为p

java初学者之java语言主要知识点三

1. java中的数据类型 数据类型:基本类型和引用类型 基本类型:数值型,字符型,布尔型 数值型:整数类型和浮点类型 引用类型:类,接口,数组 基本数据类型 java中定义了四类/八类基本类型 布尔型----boolean 字符型----char 整数型----byte,short,int,long 浮点类型----float,double      (Java中所有的基本类型都有固定的存储范围和所占内存空间大小而不受具体操作系统的影响,从而保证了java的可移植性) 2. 整数类型 类型  

Java第二天——标识符命名规则、Java的知识、快捷键的使用、Scanner获取值的常用方法

1.标识符命名规则 字母.下划线.数字.美元符号($)由这四个部分组成. 标识符=首字母+其他 首字母:字母.下划线.美元符号($) 其他:字母.下划线.数字.美元符号($) 注意: 1.首字母不能为数字 2.标识符不能是关键字 3.java语言严格区分大小写,比如:$name $Name表示两个不同的标识符 2.java程序的注释: 单行注释(//).多行注释(/**/).文档(doc)注释 单行注释:一般用于对每一行代码进行说明 多行注释:一般用于对每一段代码.某个方法.某个源文件进行解释说

Java 语言基础

基础常识 常用的DOS命令 dir :    列出当前目录下的文件以及文件夹md :   创建目录rd :     删除目录cd :    进入指定目录cd.. :  退回到上一级目录cd\:    退回到根目录del :    删除文件exit :   退出 dos 命令行 JDK(Java Development Kit    Java开发工具包) JRE(Java Runtime Environment    Java运行环境) 简单而言,使用JDK的开发工具完成的java程序,交给JRE

java基本语法day01_09变量的声明与使用

概念: 内存中的一个存储区域. 该区域拥有自己的名称(变量名)和类型(数据类型). java是强类型语言,java中每个变量必须先声明后使用. 该区域的数据可以在同一类型范围内不断变化. 注意: 变量的作用域:在一对{}之间有效. 初始化值 定义变量的格式:数据类型 变量名 = 初始化值 变量是通过变量名来访问这块区域的. 变量按作用域(被声明的位置)进行分类: 1.成员变量:在方法的外部.类的内部定义的变量(也叫全局变量).在一个类的任意地方都可以被访问. 局部变量:在方法或语句块的内部定义的