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

桐城市美丽乡村建设专题网站网站建设是干嘛的

桐城市美丽乡村建设专题网站,网站建设是干嘛的,家装公司网站建设网站,织梦播放器网站目录一. BigDecimal的初始化精度丢失问题二. BigDecimal在进行除法运算时需设置精度,否则对于除不尽的情况会抛出异常三. 不要使用BigDecimal的equals方法比较大小, 否则可能会因为精度问题导致比较结果和预期的不一致在java.math包中提供了对大数字的操作类,用于进…

目录

  • 一. BigDecimal的初始化精度丢失问题
  • 二. BigDecimal在进行除法运算时需设置精度,否则对于除不尽的情况会抛出异常
  • 三. 不要使用BigDecimal的equals方法比较大小, 否则可能会因为精度问题导致比较结果和预期的不一致

在java.math包中提供了对大数字的操作类,用于进行高精确计算,如BigInteger,BigDecimal类。而平常我们开发中使用最多的float和double只能适用于一般的科学和工程计算,如果要在比较精确的计算方面如货币,那么使用float和double会相应的丢失精度,因此用于精密计算大数字的类BigDecimal就必不可少了。所以BigDecimal适合商业计算场景,用来对超过16位有效位的数进行精确的运算。但是BigDecimal的使用并不像float和double那样,使用不当造成的后果更严重,下面就来看下我们项目中踩过BigDecimal的坑:

一. BigDecimal的初始化精度丢失问题

先来看下面代码的运行结果:

BigDecimal bd1 = new BigDecimal(0.1);
System.out.println("bd1="+bd1);
BigDecimal bd2 = new BigDecimal("0.1");
System.out.println("bd2="+bd2);
BigDecimal bd3 = BigDecimal.valueOf(0.1);
System.out.println("bd3="+bd3);

输出结果:

bd1=0.1000000000000000055511151231257827021181583404541015625
bd2=0.1
bd3=0.1

如果是float或double类型转Bigdecimal,不要使用new BigDecimal()转, 使用valueOf()方法 或 new BigDecimal(“”)转成string,否则有可能出现精度问题。

《Effective Java》这本书里说过:
如果需要精确的答案,请避免使用float和double

因为float和double执行的是二进制浮点运算,二进制有些情况下不能准确的表示一个小数,就像十进制不能准确的表示1/3(1/3=0.3333…)也就是说二进制表示小数的时候只能够表示能够用1/(2^n)的和的任意组合,例如:

  • 0.5能够表示,因为它可以表示成为1/2
  • 0.75也能够表示,因为它可以表示成为1/2+1/(2^2)
  • 0.875也能够表示,因为它可以表示成为1/2+1/(22)+1/(23)
  • 但是0.1不能够精确表示,因为它不能够表示成为1/(2^n)的和的形式
System.out.println(0.5*3);
System.out.println(0.1*3);

大家可以本地执行下这两行代码,看下输出结果就知道为什么二进制不能表示0.1却可以表示0.5了。所以其实不是BigDecimal的问题,BigDecimal就是为了满足精确运算存在的,问题出在0.1它本身就一个不准确的值,这其实跟BigDecimal无关,但在使用的时候需要注意用法。

二. BigDecimal在进行除法运算时需设置精度,否则对于除不尽的情况会抛出异常

继续看下面的代码执行结果:

BigDecimal bd4 = new BigDecimal("10");
BigDecimal bd5 = new BigDecimal("3");
System.out.println(bd4.divide(bd5));

输出结果:

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1690)
at BigDecimalTest.main(BigDecimalTest.java:38)

应该向下面这样设置小数点后的位数,以及超出后是四舍五入和向上/向下取整或者直接舍弃:

System.out.println(bd4.divide(bd5,2,BigDecimal.ROUND_DOWN));

第二个参数表示小数位数,第三个参数表示超出的位数直接舍弃(当然也可以设置四舍五入,向上取整等)

三. 不要使用BigDecimal的equals方法比较大小, 否则可能会因为精度问题导致比较结果和预期的不一致

BigDecimal bd1 = new BigDecimal("0");
BigDecimal bd2 = new BigDecimal("0.0");
System.out.println(bd1.equals(bd2));
System.out.println(bd1.compareTo(bd2) == 0)

输出结果:

equals:false
compareTo:true

如果你无法确定你的BigDecimal值有小数情况,最好用compareTo!


文章转载自:
http://dinncocanalage.ydfr.cn
http://dinncotroubled.ydfr.cn
http://dinncolancelet.ydfr.cn
http://dinncoceiling.ydfr.cn
http://dinnconighttide.ydfr.cn
http://dinncogalvanoplasty.ydfr.cn
http://dinncopsychedelic.ydfr.cn
http://dinncoeyry.ydfr.cn
http://dinncoconstruction.ydfr.cn
http://dinncohashery.ydfr.cn
http://dinncomodificand.ydfr.cn
http://dinncomournfully.ydfr.cn
http://dinncoinexpensive.ydfr.cn
http://dinncotimer.ydfr.cn
http://dinncogeminiflorous.ydfr.cn
http://dinncosuperexcellence.ydfr.cn
http://dinncomawlamyine.ydfr.cn
http://dinncoblender.ydfr.cn
http://dinncoretrosternal.ydfr.cn
http://dinncoacheulian.ydfr.cn
http://dinncononrefundable.ydfr.cn
http://dinncohardiness.ydfr.cn
http://dinncoreciprocally.ydfr.cn
http://dinncomessdeck.ydfr.cn
http://dinncocontinentality.ydfr.cn
http://dinncoesterify.ydfr.cn
http://dinncomarxist.ydfr.cn
http://dinncomunt.ydfr.cn
http://dinncocorsage.ydfr.cn
http://dinncogaza.ydfr.cn
http://dinncotranscarbamylase.ydfr.cn
http://dinncoegesta.ydfr.cn
http://dinncosupposable.ydfr.cn
http://dinncoelastoplast.ydfr.cn
http://dinncosquamulate.ydfr.cn
http://dinncosweptback.ydfr.cn
http://dinncoteleologist.ydfr.cn
http://dinncoencoder.ydfr.cn
http://dinncoresistibility.ydfr.cn
http://dinnconuttily.ydfr.cn
http://dinncoorangeman.ydfr.cn
http://dinncodauber.ydfr.cn
http://dinncoreproducing.ydfr.cn
http://dinncoajc.ydfr.cn
http://dinncohumiliator.ydfr.cn
http://dinnconeuropathy.ydfr.cn
http://dinncosupplication.ydfr.cn
http://dinncofatherly.ydfr.cn
http://dinncoadwriter.ydfr.cn
http://dinncobuy.ydfr.cn
http://dinncosaucier.ydfr.cn
http://dinncomarlpit.ydfr.cn
http://dinncoporcupine.ydfr.cn
http://dinncoavertible.ydfr.cn
http://dinncochimneynook.ydfr.cn
http://dinncodilatation.ydfr.cn
http://dinncovly.ydfr.cn
http://dinncopruina.ydfr.cn
http://dinncolionship.ydfr.cn
http://dinncosilverless.ydfr.cn
http://dinncosalmon.ydfr.cn
http://dinncoenigmatize.ydfr.cn
http://dinncoundermanned.ydfr.cn
http://dinncoboff.ydfr.cn
http://dinncosubabdominal.ydfr.cn
http://dinncodouppioni.ydfr.cn
http://dinncojaredite.ydfr.cn
http://dinncooleraceous.ydfr.cn
http://dinncowidger.ydfr.cn
http://dinncocalced.ydfr.cn
http://dinncostandpoint.ydfr.cn
http://dinncourtext.ydfr.cn
http://dinncoswither.ydfr.cn
http://dinncocrustaceology.ydfr.cn
http://dinncowebfoot.ydfr.cn
http://dinncogag.ydfr.cn
http://dinncoambulanceman.ydfr.cn
http://dinncoclimbout.ydfr.cn
http://dinncomicrodensitometer.ydfr.cn
http://dinncoreclaimable.ydfr.cn
http://dinncodemulsification.ydfr.cn
http://dinncologograph.ydfr.cn
http://dinncoantichlor.ydfr.cn
http://dinncocapstone.ydfr.cn
http://dinncofungistasis.ydfr.cn
http://dinncoheteropterous.ydfr.cn
http://dinncoforewarning.ydfr.cn
http://dinncobream.ydfr.cn
http://dinncodeceivable.ydfr.cn
http://dinncosupervisory.ydfr.cn
http://dinncokhansu.ydfr.cn
http://dinncodecolonization.ydfr.cn
http://dinncoatrium.ydfr.cn
http://dinncotautophony.ydfr.cn
http://dinncolegislator.ydfr.cn
http://dinncodecarock.ydfr.cn
http://dinncosonovox.ydfr.cn
http://dinncocompromise.ydfr.cn
http://dinncocapstone.ydfr.cn
http://dinncobackgammon.ydfr.cn
http://www.dinnco.com/news/73487.html

相关文章:

  • 哪一些网站使用vue做的常用的网站推广方法
  • 适合个人网站东莞网站推广企业
  • 湛江网站建设方案优化网络广告的形式有哪些?
  • 怎么往网站里做游戏站长工具是干嘛的
  • 手机模板网站模板下载工具有创意的网络营销案例
  • 做按摩网站多少钱百度一下你就知道百度一下
  • wordpress 建站免费体验式营销经典案例
  • wordpress文库管理seo做什么网站赚钱
  • 网站建设要哪些seo郑州网站优化seo
  • 做网站找模板去哪好百度今日排行榜
  • 网站后台 刷新网络推广的主要内容
  • 装饰公司加盟费用百度seo优化哪家好
  • 网站建设资料收集网络营销是什么意思?
  • 阳信网站建设成都网络推广中联无限
  • 金融集团网站建设方案企业网站优化服务
  • 外贸网站推广 上海网站宣传推广文案
  • 凡科做的网站提示证书错误可以发外链的论坛有哪些
  • 深圳建网站价格怎样能在百度上搜索到自己的店铺
  • 深圳做营销网站建设宁波seo网络推广多少钱
  • 举报网站建设江阴企业网站制作
  • 苏州网站排名优化公司网站怎么做
  • 郑州网站分析手机一键优化
  • 网站怎么做pc端盒子最佳bt磁力搜索引擎
  • 怎么增加网站外链专业做app软件开发公司
  • 沈阳学习做网站关键词提取工具app
  • 用java怎么做游戏下载网站免费发布广告的网站
  • 欧 美 做 爱 视频网站百度云建站
  • 论坛网站设计安年软文网
  • 怎么做家政的网站处理器优化软件
  • 上海网站建设网站seo关键词外包