- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
float double精度丢失(双精度丢失浮)
float double精度丢失(双精度丢失浮)
ceil (float or double * 100) / 100
floor (float or double * 100) / 100
int是精确值类型, float是近似值类型.
int的取值范围是: - 2 ^ 31 ~ 2 ^ 31 - 1, 这里32位中第一位是符号位, 剩下的31位是表示数值的.
而float的组成是: 1位符号位 + 8位指数 (q) + 23位底数 (b), 其解释出来的形式是: b ^ q, 由于指数q是8位有符号整数, 范围是 - 128 ~ 127,23位的底数 (无符号) 最大值就是2 ^ 23, 算上指数的话, 最大可以表达到2 ^ 23 ^ 127, 但是由于计算机的运算能力限制, 并不能处理到如此大的数, 但是其取值范围也会比32位整数大很多.
由于float类型是一个幂计算式, 所以很多时候并不能表达一个精确值, 例如0.1, 如果使用float在内存中会被表示为0.10000000000000001, 如果进行反复计算将会导致非常大的误差.
float本就是近似值, 它不是精確值.
通俗點講float是有兩個值的, 一個是text, 就是你在db中看到的數字, 如2.3, 另一個則是value, 就是它真實的值, 也就是 2.299999999999.
所以在做四舍五入、精確的report、比較 (只能用 、 而不能用 =) 時請盡量避免使用float類型.建議使用decimal類型或者numeric類型.
如果lz不想改變類型可以嘗試這樣, select convert (num as decimal (10,3)) from tb
double有时候也会出问题的.
int是精确值类型, float和double都是近似值类型.
decimal 值类型表示从正 79228162514264337593543950335 到负 79228162514264337593543950335 之间的十进制数.decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算.
十进制数是由符号、数值和比例因子组成的浮点值, 数值的每一位的范围都是 0 到 9, 比例因子指示分隔数值的整数和小数部分的浮点小数点的位置.
ceil (float or double * 100)
floor (float or double * 100)
要避免这种写法
部分小数会丢失精度, 因为像0.1,0.2,0.2,0.4,0.6,0.7,0.8,0.9........ 乘以2到不了尽头, 而整数永远不会丢精度, 因为任何整数都可以用二进制表示
java float类型 减法运算时精度丢失问题
package test1;
public class test2 {
/ * *
* @ param args
* /
public static void main (string [] args) {
float xx = 2.0f;
float au = 1.8f;
float tt = xx one;
system.out.println (tttttt ----- + tt);
}
}
果然输出结果是: tttttt-----0再测试了几个float类型的减法, 除了 *.0这样的相减没有异议之外, 都存在这个问题, 就是说float在相减的时候精度丢失了.后来在网上找到一段解决这个问题的办法, 记在这里:
package test1;
import java.math.bigdecimal;
public class test2 {
/ * *
* @ param args
* /
public static void main (string [] args) {
float xx = 2.2f;
float au = 2.0f;
float tt = xx one;
bigdecimal b1 = new bigdecimal (float.tostring (xx));
bigdecimal b2 = new bigdecimal (float.tostring (au));
float ss = b1.
floatvalue()减去(B2);
系统的输入(“SSSS ----“+ SS);
系统的输入(“tttttt -----”+ TT);
}
}
输出为:
SSSS ---- 0.2
tttttt-----0这样一对比,差异就很明显了。
解决了问题,再找了一下为什么会产生这种差异:
网上有篇文章写得很详细,标题为《剖析浮型的内存存储和精度丢失问题》,全文内容如下:
您可能关注的文档
- !支持安装飞Q软件的机型(Support the installation of flying Q software models).doc
- (如何学看盘)((learn how to read the tape)).doc
- 00年一级听力原文(00 years of listening comprehension).doc
- 04.行车闭塞07-04-01(4 block 07-04-01).doc
- 08-11月-TTT企业培训师培训(08-11 months -TTT enterprise trainer training).doc
- 10以内加减法练习题(10 plus or minus exercises).doc
- 100个最常见错别字详解(The 100 most common typos.).doc
- 110kV终端变电所电气部分设计+电气主接线图+短路计算(110kV terminal substation electrical design + electrical main wiring diagram + short-circuit calculation).doc
- 12-爱数备份软件 服务器版3.0(12- love number backup software server version 3).doc
- 129条成功励志名言名句(129 successful inspirational quotes).doc
- 半导体材料性能提升技术突破与应用案例分析报告.docx
- 半导体设备国产化政策支持下的关键技术突破与应用前景报告.docx
- 剧本杀市场2025年区域扩张策略研究报告.docx
- 剧本杀行业2025人才培训体系构建中的市场需求与供给分析.docx
- 剧本杀行业2025年人才培训行业人才培养模式创新与探索.docx
- 剧本杀行业2025年内容创作人才需求报告.docx
- 剧本杀行业2025年区域市场区域剧本市场消费者满意度与市场竞争力研究报告.docx
- 剧本杀市场2025年区域竞争态势下的区域合作策略分析报告.docx
- 剧本杀行业2025人才培训与行业人才培养模式创新.docx
- 剧本杀行业剧本创作人才心理素质培养报告.docx
最近下载
- GB50150-2016 电气装置安装工程 电气设备交接试验标准 (2).pdf VIP
- GBT51121-2015 风力发电工程施工与验收规范.doc VIP
- 抗凝剂皮下注射技术临床实践指南(2024版)解读 2PPT课件.pptx VIP
- 腰椎解剖应用.ppt VIP
- 人教版高一数学上册《第一单元集合》同步练习题及答案.pdf VIP
- 紫外可见分光光度计招标文件.doc VIP
- 《Android-Jetpack开发-原理解析与应用实战》读书笔记思维导图.pptx VIP
- DB3706_T 74-2021 西洋梨生产技术规程.pdf
- 【精选】ICAO附件14.pdf
- JEP122G 半导体器件失效机理和模型.pdf VIP
文档评论(0)