此文解释了为何float的范围比int大(同样4字节),但有些int是float无法正确表达的(精度丢失)

java中的float和double的精度问题

1、背景知识

在java中没有细讲,只是讲了float占32位(bit),double占 64位。

对于计算机来说,用位数表示是合适的。但有人喜欢用字节(byte)表示。一个字节占8位。

1 byte = 8 bit.

所以float占4个字节,double占8个字节。

不过我还是喜欢用位数表示。这样更直接,也更容易理解计算机是怎么存储这些类型的。

对于精度和范围,还是参考一下c++吧。

2、存储知识

计算器存储浮点数的方法:(用科学计数法存储)

将要存的数先转换为小数(0.xxxxxx)x10的n次幂的形式进行存储。

例如:

3.1415 将被转换为:0.31415 x 10^1

100000 将被转换为:0.1 x 10^6

首先申明一点,先范围(有效数字位,包括整数位和小数位),再精度。

3、下面切入正题

=====================

在c++中单精度float类型与双精度double类型的问题

【"单精度用float表示,在计算机中使用4位字节(32位bit)来表示,具有7位有效数字"】

float类型存储的时候1个bit是符号位,8个bit是指数位,剩下的23个bit是有效数字位。

2的23次方是8388608,即7位有效数字,精度(10进制)。

一个单精度的浮点数在内存当中占用了32个bit位,按照浮点数的表示标准,最高位表示符号,这32位一部分用来表示阶码,一部分用来表示小数部分。

按照这个表示方法转化成10进制之后,它能表示的最高精度是7位有效数字。

比如

float a=3.14159;a在内存中实际上表示为0.314159乘以10的1次方(0是符号位),而分配给a的存储单元就分为两部分,一部分存0.314159,一部分存指数1,而且也都是转化为2进制来存。

==================

float ,1位符号位, 8位指数位,23位尾数位

double,1位符号位,11位指数位,52位尾数位

float尾数位23位,2^23=8.3E6,7位,所以不同的编译器规定不同,有些是7位,有些8位

double尾数52位,2^52=4.5E15,15位,所以double的有效位数是15位

后记:

数一下有效数字位数(整数位+小数位),7位以内的用float,15位以内的用double

但是还有一点小小的区别:

float f =  (float) 62345678.912345;  // => 6.234568E7  共 7 位

float f2 =  (float) 12345678.912345; // => 1.2345679E7 共 8 位

(精度问题,float精度为7--8位,8位的情况是第一位是1,当是2时进位后面的精度丢失?)

java float的精度_java中的float和double的精度问题相关推荐

  1. 用Java向SQL Server数据库中插入float数据报错An error occurred while converting the Float value to JDBC data type

    作者:翁松秀 用Java向SQL Server数据库中插入float数据报错 用Java向SQL Server数据库中插入float数据报错 报错信息: 报错原因: 解决方案: 报错信息: An er ...

  2. java float存储方式_Java中小数的存储方式

    因为底层的二进制数不能精确表示所有的小数.有时候会产生让人觉得莫名其妙的事情. 如在java中, 0.99999999f==1f//true 0.9f==1f //false 要明白这些,首先要搞清楚 ...

  3. java string 精度_Java 中的浮点数取精度方法

    1 packagecn.com.cxsw.utils;2 3 importjava.math.BigDecimal;4 5 /** 6 * 与小数位精度(四舍五入等)相关的一些常用工具方法.7 *8 ...

  4. js parsefloat 精度_javascript中的float运算精度

    有人问到一个js问题:var i = 0.07; var r = i*100; alert(r); 结果为什么是7.0000000000000001? 查了下资料,其实我们知道JavsScript中, ...

  5. java int 64 转换_Java中数据类型及其之间的转换

    Java中数据类型及其之间的转换 Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种: 1)int长度数据类型有:byte(8bits).short(16bits).int(32bi ...

  6. java浮点型数据类型分为_java中的浮点型数据类型有哪几种

    java中的浮点型数据类型有哪几种 发布时间:2020-06-23 14:14:45 来源:亿速云 阅读:67 作者:元一 这篇文章将为大家详细讲解有关java中的浮点型数据类型,文章内容质量较高,因 ...

  7. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  8. java为什么要初始化_JAVA中到底要怎么样初始化

    Java中的变量作用范围: 1. 类的属性,或者叫值域 2. 方法里的局部变量 3. 方法的参数 对于第一种变量,Java虚拟机会自动进行初始化.如果给出了初始值,则初始化为该初始值.如果没有给出,则 ...

  9. java 基本类型 引用_java中 引用类型 和 基本类型 有何区别?

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newa ...

最新文章

  1. 用“逐步排除”的方法定位Java服务线上“系统性”故障
  2. 智能车竞赛线上培训:英飞凌AURIX的智能车应用--基础四轮篇
  3. 明略科技完成2亿美元E+轮融资,中俄投资基金领投,腾讯、弘卓资本等跟投
  4. 计算机语言低下限高上限,原神双雷阵容厉不厉害
  5. mysql 有十进制类型吗_MySQL数据类型
  6. 妹子每天加班1分钟,半年崩溃!向公司索赔55万!
  7. linux显示指定目录容量,linux 查看指定目录的容量大小,系统目录容量大小
  8. BP神经网络预测(python)
  9. mysql nlssort_Oracle中文排序 NLSSORT
  10. mac 安装 Homebrew教程
  11. 罗永浩又双叒叕diss苹果了
  12. Dapper - 论文 中文版 大规模分布式系统的跟踪系统
  13. 支持3d android 模拟器,3D太空模拟器
  14. 吉米_王:浅谈深拷贝和浅拷贝异同点
  15. absolute定位宽高尺寸继承
  16. HCIP-IoT NB-IoT标准
  17. 微服务架构设计实践之七:业务架构
  18. 普元 AppServer 6.5 支持哪些日志级别?
  19. 小米6android版本多少,小米6有几个版本 小米6各版本区别对比
  20. Windows网络命令ipconfig详解

热门文章

  1. GIF闪图怎么制作?教你一键制作GIF闪图
  2. centos7升级到centos8
  3. TS:解决docker无法启动,报:start request repeated too quickly for docker.service错误-2021.12.08(已解决)
  4. day02 python基础知识(了解python)
  5. 自动瘦脸与眼睛放大美颜算法[转载]
  6. 课程设计————学生信息管理系统(包含历代思路和代码)
  7. MDPI参考文献引用
  8. 思维导图MindManager基础教程
  9. 深度学习的可解释性——Striving For Simplicity: The All Convolution Net
  10. 无意中发现的神奇题目~