范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

日常开发踩坑你的数值计算真的如你所愿吗?

  作者 | 浩说编程
  来源 | 公众号:浩说编程
  [ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ]
  读者在日常业务开发中或多或少会涉及到一些数值计算逻辑,尤其是金融行业需要特别严谨,通常由数值引起的问题都是潜移默化的且难以发现。
  拿"数值偏差"来说,初期的微小偏差是很难察觉的,当这种偏差累积成量级的数值错误而引起生产事故则为时已晚。
  本篇就针对这一部分踩过的坑为读者做科普和预警。
  一、浮点数的精度偏差:1减0.8真的等于0.2吗?
  测试一下:System.out.println(1 - 0.8);
  控制台输出:0.19999999999999996
  显然结果并非我们所想,原因是十进制数在计算机底层是以二进制数保存的(0、1),浮点数的精度偏差就产生于这个进制转换过程。
  既然浮点数会产生精度偏差,那么使用Java提供的精度运算类BigDecimal就能避免偏差吗?
  尝试修改代码:System.out.println(new BigDecimal(1).subtract(new BigDecimal(0.8)));
  控制台输出:0.1999999999999999555910790149937383830547332763671875
  是否又出你所料,BigDecimal确实在精度上有所提升,不过并不是想要的正确结果,所以再次修改代码:System.out.println(new BigDecimal("1").subtract(new BigDecimal("0.8")))
  控制台输出:0.2 1脱坑指南一
  想要避免浮点数运算的精度偏差,需使用java.math包下提供的精度运算类BigDecimal,且必须使用字符串类型参数初始化BigDecimal。
  码文不易
  你的关注是浩说编程持续更新的动力
  浩说会做得更好
  二、浮点数的判断:用equals判断真的奏效了吗?
  对于浮点数的判断通常有两种情况:1、值相等,2、值相等且精度相等。下面用equals分别测试一下:System.out.println(new BigDecimal("1.0").equals(new BigDecimal("1"))) System.out.println(new BigDecimal("1.0").equals(new BigDecimal("1.0")))
  控制台输出:false true
  结果很直观,对于浮点数来说,equals的判定条件是值相等且精度也要相等,否则无法奏效。
  那么如果只想判断值是否相等应该怎么做呢?使用compareTo方法:System.out.println(new BigDecimal("1.0").compareTo(new BigDecimal("1"))==0);
  控制台输出:true脱坑指南二
  想要仅对浮点数的值判等用compareTo方法,值+精度判等用equals方法。
  三、数值溢出:运算时数值超过类型最大值不会报错吗?
  通过代码测试一下,第二行数值溢出了,首先没有编译错误:Integer integer = Integer.MAX_VALUE; System.out.println(integer + 1); System.out.println(integer + 1 == Integer.MIN_VALUE);
  控制台输出,也没有任何异常:-2147483648 true
  所以内存溢出不会报错,数值将回到对应数据类型的最小值重新轮回。既然问题已经产生,应该如何解决呢?脱坑指南三
  Plan A:使用Math类提供的带有溢出异常捕获的运算方法xxExact
  方法源码,对溢出主动捕获异常
  Plan B:使用范围更大的数据类型BigInteger,可能有读者会问"如果这个类型也不够用溢出了呢",只能说这样问下去的话问题永远也没有答案了。
  总结:三个坑点
  1、浮点数的精度偏差
  方案: 使用BigDecimal做浮点数运算,且构造入参要使用字符串类型
  2、浮点数的判等问题
  方案:仅对浮点数的值判等用compareTo方法,值+精度判等用equals方法
  3、隐性的数值溢出问题
  方案1:使用Math类提供的带有溢出异常捕获的运算方法xxExact做数值运算
  方案2:使用范围更大的数据类型BigInteger
  以上就是本篇的内容,希望读者通过上面的内容提高对数值运算逻辑的警惕性,防止发生类似的问题。浩说编程致力于为读者解惑,欢迎私信交流,关注我,你会学到更多。
  作者 | 浩说编程
  来源 | 公众号:浩说编程

逛超市若是遇到这5样物品,建议买回家,能让家务活少一半很多人都喜欢逛超市,并不是需要买什么,而是享受这个过程。当然看到什么好的小物品,总是喜欢买回家!目的是减少家务活,让我们的生活变得更轻松。所以呢建议大家,供超市若遇到这五件物品,建一半人把洗衣机排水管插地漏,错啦!瞧聪明人的做法,简单省空间自古以来,中国人对于卫生间的要求非常高,装饰得也非常的细致,尤其是中国的卫生间,从古代发展到现在,已经丰富多样。最普遍的就是洗衣机排水口问题,洗衣机会有专门的下水通道,但是夏天来临大多数人卫生间拖把没地方放,学学这样弄,干净整洁自古以来,中国人对于卫生间有着非常讲究的追求,装饰得也非常的细致,尤其是中国的卫具,从古代发展到现在,已经非常的丰富多样。下面小编来帮大家搜罗一些实用的卫生间好物,个个小巧又耐用。钓鱼技巧,换个方法挂蚯蚓,马上爆满蚯蚓,是我们垂钓人用得最多的饵料之一,我们好多时候都是直接用,蚯蚓被我们说成万能饵,可是有时候,万能饵也不灵。比如去的一个地方,别人都是用商品饵,你用的蚯蚓,结果不上钩。你可能会说注意!双十一开始对你家里的老年人下手了一直以来,年轻人始终占据着消费的C位。无论是线上还是线下,传统还是新品牌,各大商家纷纷加入年轻人争夺战,Z世代成为市场上的香饽饽。与之相对应的,是数量庞大却被列为非优质用户的老年群CRC2019顺利召开多方献策致力彩电重归家庭智能C位2019年7月18日,中国智能显示与创新应用产业大会暨CRC2019年上半度彩电行业研究发布会在京举行。本次CRC第52届大会对2019年上半年中国电视行业进行盘点总结和展望,会议日本车底盘技术真不如欧洲?丰田日产表示你被骗了很多年前不久和泰哥讨论一个问题都说欧洲车底盘紧实,日本车相对松散。所以一直一来民间有个说法欧洲车底盘好于日本车。而我们发现大多数喜欢驾驶的朋友都更偏爱紧绷的底盘风格。甚至这一偏好被带入到开放世界RPG王者荣耀世界公布实机画面,即将发布在昨天也就是10月30日王者荣耀六周年庆典举办的2021共创之夜中发布了很多后续的更新和活动信息,包括王者荣耀和86版西游记之间的联动会继续推出,以及王者荣耀的舞台音乐剧也正式提上修车竟然不用原厂件?副厂件究竟有多烂?便宜但能用么?如果您的车坏了,在维修过程中,无意间发现,修车企业给您使用的部件,竟然不是原厂件您作何感想?没错!也许您第一时间的反应就是我遇到了副厂件!那么这副厂件究竟比原厂件差多少?使用副厂件义乌新出新式柴火灶,土灶台不兴了,干净方便可移动,高级在农村待过的朋友都知道,小时候我们用来做饭的灶台全是请泥工来建造的。建造的时间需要3到5天。随着社会的发展,这种灶台已经被淘汰了。但是如果你还想吃到那样的柴火饭怎么办?小编告诉你,一见钟情的3个厨房用品,买时心疼,用起来真香!建议备齐厨房作为家里的核心区,每天看到干净整洁的厨房,对于我们来说,可以提升幸福感!那么想要保持厨房干净,除了需要我们自己勤快一些,还需要搭配一些好用的厨房用品,这样可以更干净!一见钟情的
用过就后悔,果粉再也不想换其他iphone手机壳用过凯夫拉手机壳的朋友经常会说这么一句话用过了凯夫拉,真的不想再换其他手机壳了!用过凯夫拉手机壳的人都后悔了,后悔买晚了。。可能有人会质疑它真有你说得那么好?光会吹牛!诸君留步!质感恩节不知道送什么礼物给男朋友的,速度看过来要问男人喜欢啥?送数码产品绝对没错!男人对数码的热爱女人对化妆品的痴狂。送一款既实用又能帮助男票耍帅的Airpalmini,他肯定喜欢!凯夫拉材质(防弹衣材料)制作,日常防摔抗震能长征六号一箭五星火箭和PITAKA手机壳的相同点是什么长征六号一箭五星火箭和PITAKA手机壳的相同点是什么费解两者都采用了同一种材质凯夫拉纤维。它被称为全能纤维,是世界上最坚韧的材料之一,强度高韧性好重量轻耐高温抗低温抗腐蚀耐磨,其我恨!三星不配拥有好看的手机壳吗?三星粉我太难了不知道三星粉有没有遇到这样的瓶颈好看的手机壳都只有iPhone和华为型号,是三星不配吗?配什么壳都贼丑。论三星粉多么的没有人权有的三星粉甚至生气放话我迟早有一天会因为买不到好看的手要哭了!iPhone11降到4599起,合适配件史低价,网友又买早了从年中开始,iPhoneXRXSXSMax的价格就在持续下调,之前打算入手iPhone系列手机的朋友,都还在观望,考虑到底要什么时候买才更划算?没想到双12来了,某第三平台百亿补贴你的手机壳能扛得住刀刮火烤摔楼球击吗?前方高能预警本文很暴力请谨慎食用,谨慎模仿手机有多抗摔,诺基亚可能知道。手机壳有多抗摔,那可能只有MagEZCasePro知道。由PITAKA原创研发的凯夫拉手机壳MagEZCas凯夫拉手机壳,新精英的选择PITAKA凯夫拉手机壳,闷骚绿,气质灰,热情红,优雅黑,轻奢金,妖娆黄。总有一款适合你!!颜色随心换,PITAKA凯夫拉手机壳7色可选!!PITAKA凯夫拉手机壳时尚商务,匹配你你是不是买到假冒的凯夫拉手机壳了?听说最近数码圈刮起了一阵凯夫拉手机壳热潮。先是海外的Youtuber,再到专业的测评爱好者,国内的数码科技玩家高端材料爱好者很多人觉得凯夫拉材质的手机壳,非常轻薄,手感柔软很舒适,海盗船HS80无线耳机拆解!无线电竞耳机到底香不香?前言电竞耳机这一概念是十几年前SteelSeries通过西伯利亚和H系列耳机所提出的,当年随着CS这一硬核FPS游戏的兴盛,电竞耳机品类得到高速发展。近几年,穿越火线守望先锋和CSOPPO真无线蓝牙耳机它的颜值到底有多高?对的起这个价钱吗?在12月26日OPPO在杭州发布了OPPO国内首款5G手机,并且还发布了OPPO真无线蓝牙耳机OPPOEnceFree。耳机里面的配件分别都有充电线一条,说明书,还有可以调整耳塞套冷冻也能杀菌!入手超高性价比海信536L大容量冰箱前言新房正好刚刚装修完,正值放味儿和采购电器的阶段。在冰箱的选择上,因为父母对于空间的需求比较大,所以将目标放在500L以上容量的对开门产品。如今的冰箱产业,国内品牌不管从技术实力