当前位置: 首页 > news >正文

java数据类型的转换以及精度丢失

java数据类型的转换以及精度丢失_long转double会丢失精度吗_ღLiJia的博客-CSDN博客

一.浮点类型在计算机当中的存储 

在这里插入图片描述

  • float存储需求是4字节(32位), 其中1位最高位是符号位,中间8位表示阶位,后32位表示值
    • float的范围: -2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38
    • float的精度: 2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字
  • double存储需求是8字节(64为),其中1位最高位是符号位,中间11位表示阶位,后52位表示值
    • 取值范围: -2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308 
    • 精度: 2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位
  • long数据类型是64位有符号Java原始数据类型。
    • 取值范围: -9223372036854775808到9223372036854775807 (”-2^64“ 到”2^64 -1)

精度丢失就是我们的位数不够表示我们整个数值了

问题原因:

首先计算机进行的是二进制运算,我们输入的十进制数字会先转换成二进制,进行运算后再转换为十进制输出。Float和Double提供了快速的运算,然而问题在于转换为二进制的时候,位数不够表示我们整个数值,有些数字不能完全转换,只能无限接近于原本的值,这就导致了在后来的运算会出现不正确结果的情况。

整体转换图 

如图所示,其中:

  • 实线byte→short、short→int、int→long、int→double、char→int、float→double转换是不会发生精度丢失的,因为后者所包含的范围比前者大且完全包含前者。
  • 虚线int转float、long转float,long转double都会发生精度丢失。精度丢失包括两种,一是有效数字丢失,一是目标类型完全无法表示数据

原因如下:

int和float都是32位,但是内存结构也就是存储结构是不一样的,float只有24(含隐含的一位整数位)位来确定精度,而int是32位。long转float,long转double精度丢失原理是一样

详解:
我们知道,float的存储结构是1个符号位,8个指数位,23个尾数。

  • 符号位,表述浮点数的正或者负,0代表正,1代表负。
  • 指数位,实际也是有正负的,但是没有单独的符号位,在计算机的世界里,进位都是二进制的,指数表示的也是2的N次幂,8位指数表达的范围是0到255,而对应的实际的指数是-127到128。也就是说实际的指数等于指数位表示的数值减127。
  • 尾数位,只代表了二进制的小数点后的部分,小数点前的那位被省略了,当指数位全部为0时省略的是0否则省略的是1。

所以可以说,实际上尾数确定了浮点数的精度,而数的大小主要是靠指数位,尾数只有23位,加上隐含的一位整数位便是24位。也就是说int类型的值在2^24以内,float是可以精确表示的,但是当超过这个数的时候就不一定能精确表示了。其他类型也是如此。 

取值范围:

1、int。

  • 最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
  • 最大值:Integer.MAX_VALUE= 2147483647  (2的31次方-1)

2、double。

  • 最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)
  • 最大值:Double.MAX_VALUE=1.7976931348623157E308 (2的1024次方-1)
  • 负值取值范围为:  -1.7976E+308 到 -4.94065645841246544E-324,
  • 正值取值范围为: 4.94065645841246544E-324 到 1.797693E+308
    • (e+308表示乘以10的308次方,而e-324 表示乘以10的负324次方)
  • float有效数字8位,double有效数字16位

3、long。

  • 最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)
  • 最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)

4、float 。

  • 最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)
  • 最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)
    • ​​​​​​​​​​​​​​(e+38 表示乘以10的38次方,而e-45 表示乘以10的负45次方)
System.out.println("Long.MAX_VALUE: ---> " + Long.MAX_VALUE);
System.out.println("Double.MAX_VALUE: ---> " + new Double(Double.MAX_VALUE).longValue());
System.out.println("Double.MAX_VALUE: --->" + new Double(1.797693e+308).longValue());// 打印结果
Long.MAX_VALUE: ---> 9223372036854775807
Double.MAX_VALUE: ---> 9223372036854775807
Double.MAX_VALUE: --->9223372036854775807

 ​​​​​​​​​​​二、 Java数据类型及转换原则

赋值和方法调用转换规则:从低位类型到高位类型自动转换,从高位类型到低位类型需要强制类型转换:

  (1)布尔型和其它基本数据类型之间不能相互转换;
  (2)byte型可以转换为short、int、、long、float和double;
  (3)short可转换为int、long、float和double;
  (4)char可转换为int、long、float和double;
  (5)int可转换为long、float和double;
  (6)long可转换为float和double;
  (7)float可转换为double;

  其中,int转换为char类型,float类型都需要强转,会导致精度丢失
   long转换为double也需要强转,会导致精度丢失

 三、打印数值

char类型的最大值:127
char类型的最小值:-128
signed char类型的最大值:127
signed char类型的最小值:-128
unsigned char类型的最大值:255

short类型的最大值:32767
short类型的最小值:-32768
unsigned short类型的最大值:65535

int类型的最大值:2147483647
int类型的最小值:-2147483648
unsigned int类型的最大值:4294967295

long类型的最大值:2147483647
long类型的最小值:-2147483648
unsigned long类型的最小值:4294967295

float类型的尾数位数:24
float类型的最小有效数字位数:6
带有全部有效数字位数的float类型的负指数的最小值:38
带有全部有效数字位数的float类型的正指数的最大值:-37
保留全部精度的float类型正数的最小值:1.175494e-038
保留全部精度的float类型正数的最大值:3.402823e+038
1.00和比1.00大的最小的float类型值之间的差值:1.192093e-007

double类型的尾数位数:53
double类型的最小有效数字位数:15
带有全部有效数字位数的double类型的负指数的最小值:308
带有全部有效数字位数的double类型的正指数的最大值:-307
保留全部精度的double类型正数的最小值:2.225074e-308
保留全部精度的double类型正数的最小值:1.797693e+308
1.00和比1.00大的最小的double类型值之间的差值:2.220446e-016

long double类型的尾数位数:64
long double类型的最小有效数字位数:18
带有全部有效数字位数的long double类型的负指数的最大值:4932
带有全部有效数字位数的long double类型的正指数的最小值:-4931
保留全部精度的long double类型正数的最小值:3.205284e-317
保留全部精度的long double类型正数的最大值:3.205284e-317
1.00和比1.00大的最小的long double类型值之间的差值:3.205284e-317

相关文章:

java数据类型的转换以及精度丢失

java数据类型的转换以及精度丢失_long转double会丢失精度吗_ღLiJia的博客-CSDN博客 一.浮点类型在计算机当中的存储 float存储需求是4字节(32位), 其中1位最高位是符号位,中间8位表示阶位,后32位表示值 float的范围: -2^128 ~ …...

网络通信基础 - 多路复用技术(频分多路复用、时分多路复用、波分多路复用)

文章目录 1 概述1.1 复用器 MUX 2 分类2.1 频分多路复用 FDM2.2 时分多路复用 TDM2.3 波分多路复用 WDM 1 概述 1.1 复用器 MUX 多路复用技术:把多个低速信道组合成一个高速信道的技术这种技术要用到两个设备,统称为 多路器(MUX&#xff09…...

Baumer工业相机堡盟工业相机如何通过BGAPISDK的函数转换示Bayer格式为BGR8格式彩色图像(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK的函数转换示Bayer格式为BGR8格式彩色图像(C) Baumer工业相机Baumer工业相机的Bayer彩色图像的技术背景Baumer工业相机通过BGAPI SDK在回调函数里显示Bayer彩色图像Baumer工业相机在BufferEvent转换Bayer格式…...

一块钱看Android Debug: avc denied 已存在的目录不能访问

某三方应用,使用了USB摄像头,启动应用后功能不能使用,看log有如下错误, denied后面{}里的是要执行的动作,比如append,open,execmod,link等等 scontext指的是域,对应的是te文件 上面报错这条对应te文件是untrusted_app.te, scontex…...

URL 转为QR code(二维码)

推荐一个良心的网站,能够免费地将url、text编码为二维码,而且还能设计logo、颜色等。 https://www.the-qrcode-generator.com/ 如下图: 可以自己定义logo、颜色: 还能查看扫描历史等统计信息: 上述所有功能都是免…...

CentOS软件那么老为什么大家还要用它?

作为一个专业的服务器系统,RHEL 系统理论上每一个软件包都有 RedHat 内部的人员负责维护,这个维护包括长期(和系统生命周期一样长)的开发、更新、测试、运维等。也就是说你能从 RHEL 系统源上获得的每一个软件包,出现问…...

聚观早报|飞猪:五一出游需求爆发;​特斯拉一季度盈利同比跌20%

今日要闻:飞猪:五一出游需求爆发;特斯拉一季度盈利同比暴跌20%;郑渊洁永远不再发表作品;KargoBot推出无人化自动驾驶卡车;中国6G通信技术研发取得重要突破 飞猪:五一出游需求爆发 4 月 19 日&a…...

Redis缓存雪崩、穿透、击穿

Redis缓存雪崩、穿透、击穿 解决方案正常的缓存流程Redis缓存雪崩Redis缓存雪崩解决方案 Redis缓存穿透Redis缓存穿透解决方案 Redis缓存击穿Redis缓存击穿解决方案 解决方案 布隆过滤器,分布式锁 正常的缓存流程 Redis缓存雪崩 Redis中的key大面积失效&#xff0…...

不要老盯着ChatGPT,这几家公司的产品同样不容小觑

Adept.ai 2022 年成立,致力于一款能够代替人类使用电脑、操控软件的AI助手,旗下模型 ACT-1 还处于雏形阶段,但根据官方示例,已经可以完成通过自然语言指令完成特定的任务。公司创始人曾任OpenAI的工程副总裁,后来进入谷…...

DataBinding 大坑总结(网上我暂时搜不到解决方法)

在使用多Module中使用DataBinding会引发一些奇怪的问题,最近好好的腾出时间来折腾这些奇怪的问题: 1:如果当Module启动DataBinding重启AS启动报错的话,就启用允许多行代码 android { defaultConfig {multiDexEnabled true} } de…...

Linux I/O复用函数的使用情况和select接口的介绍

I/O 复用使得程序能同时监听多个文件描述符,这对于提高程序的性能至关重要。通常, 网络程序在下列情况下需要使用 I/O 复用技术: 1.TCP服务器同时要处理监听套接字和连接套接字 2.服务器同时要处理TCP请求和UDP请求。 3.程序同时要处理多个套…...

leetcode:数字转换为十六进制数(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字…...

Android 10 设置人脸解锁时,锁屏显示人脸解锁图标

Android 10设置人脸解锁时,锁屏解锁图标不会显示人脸图标,若想显示人脸图标,可参考以下两点进行修改: 1.此处引用人脸图标资源,请参考如下修改: diff --git a/packages/SystemUI/src/com/android/systemui/…...

【嵌入式环境下linux内核及驱动学习笔记-(5-驱动的并发控制机制)】

目录 1、上下文和并发1.1 上下文1.2 共享与临界内核中并发控制机制分为以下几类:并发控制机制的使用场景: 2、 并发控制机制--中断屏蔽3、并发控制机制--原子变量3.1 相关函数原子量类型a.设置原子量的值b.获取原子量的值c.原子变量加减d.原子变量自增自…...

必学宝典 黑马《最新JavaWeb开发教程》上线

对于程序员,所在的行业更迭实属过快,如果是为了找一份好工作,学技术前一定要先了解技术在市场中的需求情况。不然等你学完之后,才发现自己学了已被淘汰、过时的技术,白白浪费了宝贵的学习时间,后悔都来不及…...

【社区图书馆】学习如何读书

人类社会只有发明了发明的方法之后才能发展。同样道理,你们只有学习了学习的方法之后才能进步。 ——查理芒格 进了开发的门,从一开始就在查文档、百度搜 bug 解决的文章、买书,读书。买了很多很厚的工具书,然后拿来垫桌子。再然后…...

CO02工单组件,新增/删除/修改

REPORT zpp153. 事务代码: ZPP153-整散车生产订单自动调整程序名称:ZPP153-整散车生产订单自动调整程序目的:ZPP153-整散车生产订单自动调整开发人员: *(修改日志)--------------------------------------------------------日志号…...

MIT6.824 lab3AB记录

实验目标:基于raft日志复制算法实现的线性一致性kv存储引擎。 线性一致性: 所有的读操作都能够读取到最近一次写操作的结果。所有节点(或者进程)在同一时刻,看到的数据都是相同的。 简而言之,线性一致性…...

一分钟了解美国棒球体系·棒球1号位

美国棒球体系是一个庞大且复杂的体系,涵盖了从青少年到职业的各个层次。下面是美国棒球体系的主要组成部分: 1. 青少年棒球(Youth Baseball) 美国的青少年棒球体系包括各种地区和全国性的联盟,如Little League、Pony…...

通过ObjectMapper和JsonNode 把JSON字符串转换成树结构数据和获取树节点数据

一.简介 今天同事有个需求&#xff0c;要把一个JSON字符串转换成一个树结构的数据并获取节点数据&#xff0c;鉴于自己不想写递归去转换&#xff0c;于是使用ObjectMapper和JsonNode类去实现。 二.依赖 pom文件引入依赖&#xff1a; <dependency><groupId>com.…...

零配置部署!VoxCPM-1.5-WEBUI让语音合成变得像上网一样简单

零配置部署&#xff01;VoxCPM-1.5-WEBUI让语音合成变得像上网一样简单 你是否曾为视频配音找不到合适的声音而烦恼&#xff1f;是否想过制作有声读物却苦于录音设备和时间成本&#xff1f;或者&#xff0c;你只是想体验一下&#xff0c;让AI用你喜欢的音色为你朗读一段文字&a…...

论文AI率怎么免费降?【2026建议收藏】DeepSeek/Kimi/豆包三大模型专属降重指令全家桶

很多时候大学生写论文逻辑太严谨、话术太规范&#xff0c;反而会导致AI率过高&#xff0c;且一旦AI率过高&#xff0c;轻则退回重改&#xff0c;重则取消答辩资格&#xff0c;这后果谁都担不起。 为了帮大家有效降低aigc率&#xff0c;这周我专门针对目前市面上最主流的三款大…...

WarcraftHelper魔兽争霸插件:5分钟解决老游戏兼容性问题,让经典重获新生

WarcraftHelper魔兽争霸插件&#xff1a;5分钟解决老游戏兼容性问题&#xff0c;让经典重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为…...

OpenClaw极简开发:用nanobot镜像快速验证自动化脚本

OpenClaw极简开发&#xff1a;用nanobot镜像快速验证自动化脚本 1. 为什么选择nanobot镜像进行OpenClaw开发 作为一名长期在本地折腾AI自动化脚本的开发者&#xff0c;我深知环境配置的痛。每次换机器重装OpenClaw&#xff0c;总要在Node.js版本、Python依赖和模型部署之间反…...

绝美辛夷花海!九皇山春日限定,羌族古寨里的粉色浪漫

九皇山位于四川省绵阳市北川羌族自治县桂溪镇&#xff0c;是国家4A级旅游景区&#xff0c;地处四川盆地西北边缘与川西高原的过渡地带&#xff0c;属典型喀斯特地貌&#xff0c;核心风貌兼具丰富的自然生态景观与深厚的羌族人文底蕴&#xff0c;景区占地面积25平方公里&#xf…...

KITTI 3D目标检测评估工具evaluate_object.cpp编译与使用避坑指南(附修改代码)

KITTI 3D目标检测评估工具深度解析&#xff1a;从编译优化到实战技巧 在自动驾驶算法研发领域&#xff0c;KITTI数据集及其评估工具链已成为行业事实上的黄金标准。作为计算机视觉与自动驾驶研究的重要基础设施&#xff0c;KITTI评估工具的正确使用直接关系到算法性能评估的准确…...

石墨烯这玩意儿在COMSOL里折腾起来挺有意思的,特别是搞太赫兹和近红外的同学估计都遇到过选模型的纠结。今天咱们就聊点实战经验,顺便甩点代码片段

Comsol石墨烯二维材料。 包含太赫兹德鲁得和近红外Kubo两种模型。 共7个案例&#xff0c;包含参考文献。先说说太赫兹波段常用的德鲁得模型&#xff0c;这货相当于把石墨烯当经典等离子体处理。在COMSOL里实现时&#xff0c;关键要设置表面电流密度&#xff1a; sigma_drude (…...

C# : 引用类型都存在堆上吗

不完全是&#xff0c;这里要精确区分&#xff1a;引用类型的实例大多数存在堆上&#xff0c;但引用本身不一定在堆上。我们拆开来说&#xff1a;引用类型本身 vs 引用变量对象实例&#xff08;类的实例&#xff09;绝大多数情况下分配在 堆上由 垃圾回收器 管理生命周期引用变量…...

别再手动校正了!用Landsat 9 L2SP地表反射率数据,在QGIS里5分钟搞定NDVI和水体提取

遥感分析效率革命&#xff1a;用Landsat 9 L2SP数据在QGIS中实现5分钟精准制图 当遥感数据处理流程从传统数小时缩短至五分钟&#xff0c;这意味着什么&#xff1f;去年在亚马逊雨林监测项目中&#xff0c;我们团队曾因大气校正步骤延误错过了最佳干预时机。如今Landsat 9 L2SP…...

以太网MAC与PHY接口技术详解

以太网PHY、MAC及其通信接口技术解析1. 以太网接口架构概述1.1 基本组成结构以太网接口电路从硬件角度可分为两大核心组件&#xff1a;MAC控制器&#xff08;Media Access Control&#xff09;&#xff1a;负责数据链路层的媒体访问控制PHY芯片&#xff08;Physical Layer&…...