int n = 123456789;
float f =n;

打印f,发现f=1.23456792E8,发生了精度损失。
我起初的疑问,float取值范围比int取值范围大,为什么会出现精度损失那?
这里主要还是int和float底层的存储结构不同导致的。
int使用31位表示精度,float底层有23位来表示尾数,8位表示阶数。
这里精度主要是由这23位尾数来决定的(当指数位全部为0时省略的是0否则省略的是1;尾数23位加上省略的1位,float的精确度有24位。),8位阶数主要用来控制浮点数的大小。
如果int的范围超过了2^24,那么转换成float就会损失精度。
我们运用IEEE754标准来将123456789转换成单精度浮点数,来看一下精度是如何丢失的。

123456789 = 0x111010110111100110100010101 = 1.11010110111100110100010101 X 2^26
指数E=26+127=0x01111001
最终结果:0 10011001 11010110111100110100011 即123456792
精度损失,丢了3位。注意(这里最后3位101被丢掉了,但是进行了舍入处理,所以最终结果中的最后一位从0变成了1)

Java int转float 精度损失相关推荐

  1. java int转float精度丢失问题

    前几天,看java核心卷上面有一句java的int转float会有精度丢失的问题, 第一次看的不太深入,最近又碰到了这个问题,就去深入的看了下. 建议一块看看这些(有助于理解下面的问题) 源码,反码, ...

  2. Java double和float精度损失问题

    问题 一般,我们会用float和double来存储有小数的数据,可能还会用两个浮点型数据进行计算,在某些情况下,float和double会出现精度损失,导致存储的数据或者计算结果出现误差. 举个例子 ...

  3. Java黑皮书课后题第2章:*2.22(金融应用:货币单位)改写程序清单2-10,解决将double转int可能会造成精度损失问题。以整数值作为输入,其最后两位代表的是美分币值

    *2.22(金融应用:货币单位)改写程序清单2-10,解决将double转int可能会造成精度损失问题.以整数值作为输入,其最后两位代表的是美分币值 题目 题目概述 举例 程序清单2-10 修改思路 ...

  4. java int 0.5_java int转float精度缺失原因?

    long的范围大于double long与float的丢失原理同下: 1)小数转换成二进制: 整数和小数分别转换. 整数除以2,商继续除以2,得到0为止,将余数逆序排列. 22 / 2 11 余0 1 ...

  5. int和float精度

    int!!!!! float(有效位数6-7位)类型从第八位开始丢失精度: int是存入整型数据.所以存入的整数是多少就是多少.不会丢失精度. float是浮点型,浮点型数字一旦小数点后面数字多了必然 ...

  6. Java *2.22(财务应用:货币单位)改写程序清单2-10,解决将double转int可能会造成精度损失问题。以整数值作为输入,其最后两位代表的是美分币值。例如:1156就表示11美元56美分。

    2-10 示例学习:整钱总零  要点提示:本节展示一个程序,将一个大额的钱分成较小货币单位.      假如你希望开发一个程序,将给定的钱数分成较小的货币单位.这个程序要求客户输入一个double型的 ...

  7. Java黑皮书课后题第4章:*4.26(金融应用:货币单位)重写程序清单2-10,解决将float型值转换为int型值时可能会造成精度损失的问题。读取的输入值是一个字符串,比如“11.56“

    *4.26(金融应用:货币单位)重写程序清单2-10,解决将float型值转换为int型值时可能会造成精度损失的问题.读取的输入值是一个字符串,比如"11.56" 题目 题目概述 ...

  8. java short float_java – 将float转换为short,具有最小的精度损失

    我有这个正弦波产生浮点值(例如0.37885),但我希望它们作为短路.短流程直接铸造给我的值为0.那么解决方案是什么? 任何人都可以告诉我如何做到这一点 – 理想情况下不会损失精确度 – 或者如果可能 ...

  9. float计算丢精度_float精度损失 int 转 float 为什么有时会丢失精度

    float型运算为什么会损失精度 float占用32bit,其中24bit用于表示有效数字. float rv = 0.0; rv = 88889999;为什么调试程序的时候发现赋值后rv 编程由于字 ...

最新文章

  1. python常用类库_Python常用库
  2. (winform cookie)如何向某网址Post信息,并得到CookieContainer以便以后直接通过验证...
  3. responsebody如何将数据转换成json的_干货分享:如何用Retrofit直接获得Json数据(字符串)...
  4. MFC单文档框架编程(三): CTabView的使用
  5. VTK:PolyData之PointInsideObject2
  6. Teleport 开源堡垒机的使用
  7. activemq和mysql_activeMQ 填坑记
  8. 这7个在线工具,帮助您快速开发WordPress主题
  9. Wix 安装部署(二)自定义安装界面和行为
  10. 数据分析应该要避免的6个错误
  11. python 自定义词典_cawdrey-Python的几个有用的自定义词典 -Dominic Davis-Foster
  12. 小一寸和一寸照片有区别吗 一寸照片怎么变成小一寸
  13. GEM TSU Interface Details and IEEE 1588 Support
  14. Qt是什么?Qt简介(非常全面)
  15. openwrt dnsmasq rebind_protection域名劫持保护
  16. J2EE配置文件加密
  17. AUTOSAR MCAL解析:MCU
  18. PRA是个啥?老板表示很满意!
  19. Android Study 之通过DialogFragment玩转高仿IOS弹框~ ^.^
  20. cmt obm odm 代工模式oem_作为经销商如果你不懂什么是OEM、ODM、OBM?代工、贴牌是什么?那就把这些记住!...

热门文章

  1. RIL 机制---开篇
  2. ES系列7-ElasticSearch读写流程
  3. 期末大作业 | ToDoList网页设计 关于我界面设计记录
  4. 使用酷q进行图灵机器人聊天以及舔狗功能(小白完全版)
  5. linux inotify 监控文件系统事件
  6. 三张图学懂移位运算符——有符号移位?无符号移位?
  7. PTA 7-4 十进制转二进制 (10 分)
  8. 无法同步谷歌日历_关于苹果iCloud备份 | 同步,你要了解这些!
  9. Python网络与并发编程 01 Socket编程
  10. parentNode、firstChild