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

创建qq网站吗郑州华久做网站

创建qq网站吗,郑州华久做网站,企业vi设计公司旅游公司logo,wordpress 爱奇艺插件下载失败这是一个很细小的知识点#xff0c;但是很容易被忽略掉#xff0c;导致系统问题#xff0c;因此记录下来 问题背景 明明逻辑上看a和b都不为0才会调用除法#xff0c;但是系统会报错#xff1a;java.lang.ArithmeticException异常#xff1a; if (!a.equals(BigDecimal…这是一个很细小的知识点但是很容易被忽略掉导致系统问题因此记录下来 问题背景 明明逻辑上看a和b都不为0才会调用除法但是系统会报错java.lang.ArithmeticException异常 if (!a.equals(BigDecimal.ZERO) !b.equals(BigDecimal.ZERO)) {BigDecimal divide a.divide(b, 2, RoundingMode.HALF_UP); }异常截图 分析 说明 a.equals(BigDecimal.ZERO)和 b.equals(BigDecimal.ZERO)同时为false但是能引起java.lang.ArithmeticException异常的b为0所以 b.equals(BigDecimal.ZERO)的判断有误 然后就考虑到如果b的精度不是0而是0.00那么 b.equals(BigDecimal.ZERO)是不是会为false 在 Java 中BigDecimal 的 equals 方法比较的是值及其精度。 这是因为 BigDecimal.ZERO 表示的数字是 0, 精度scale为 0即没有小数部分。而 0.00 的精度则为 2所以它们被认为是不同的对象。以下是示例代码 BigDecimal b new BigDecimal(0.00); System.out.println(b.equals(BigDecimal.ZERO)); // 输出: false如果想检查一个 BigDecimal 是否为零而不关心精度使用 compareTo 方法如下所示 if (b.compareTo(BigDecimal.ZERO) 0) {System.out.println(b 是零); } else {System.out.println(b 不是零); }使用 compareTo 方法可以比较值而不考虑精度这样对于 0.00 和 0 的比较都是等于零的。 源码分析 这里我们对equals和compareTo的源码进行分析 (1) BigDecimal.equals() 的实现会比较数值和精度(scale) public boolean equals(Object x) {if (!(x instanceof BigDecimal))return false;BigDecimal xDec (BigDecimal) x;if (x this)return true;if (scale ! xDec.scale) // 精度比较return false;long s this.intCompact;long xs xDec.intCompact;if (s ! INFLATED) {if (xs INFLATED)xs compactValFor(xDec.intVal);return (xs s);} else if (xs ! INFLATED)return compactValFor(this.intVal) xs;return this.inflated().equals(xDec.inflated()); }关键点 首先比较精度(scale)如果不相同直接返回false 然后比较数值本身 所以 new BigDecimal(0.00).equals(BigDecimal.ZERO) 会返回false因为精度不同(2 vs 0) (2) compareTo 方法源码分析 BigDecimal.compareTo() 的实现 public int compareTo(BigDecimal val) {// Quick path for equal scale and non-inflated caseif (scale val.scale) {long xs intCompact;long ys val.intCompact;if (xs ! INFLATED ys ! INFLATED)return xs ! ys ? ((xs ys) ? 1 : -1) : 0;}int xsign this.signum();int ysign val.signum();if (xsign ! ysign)return (xsign ysign) ? 1 : -1;if (xsign 0)return 0;int cmp compareMagnitude(val);return (xsign 0) ? cmp : -cmp; }首先会比较符号(signum) 然后使用 compareMagnitude 比较绝对值 不直接比较精度(scale)而是会统一调整后再比较 new BigDecimal(0.00).compareTo(BigDecimal.ZERO) 会返回0因为数值相同 最佳实践 当需要严格比较两个BigDecimal是否完全相同时包括精度使用 equals() 当只需要比较数值大小时使用 compareTo() 检查是否为0时推荐使用 compareTo()
http://www.pierceye.com/news/55883/

相关文章:

  • 网店怎么做网站seo啥意思怎么做
  • 专业做网站优化需要多久劳务公司网站建设方案
  • 门户网站建设厂商名录苏州seo排名公司
  • 四个平台建设网站不显示图片用群晖nas做网站
  • 怎么查询网站的点击量济南网站优化收费标准
  • 移动端减肥网站模板资源网站后台系统
  • h5响应式网站是什么网店美工课本
  • 城市建设理论研究官方网站十堰做网站的工作室
  • 网站为什么维护中收费电影网站怎么做
  • 搭建网站兼职图片展示网站模板
  • 哪个网站做外贸生意怎么制作商城小程序
  • 遂宁建设网站贵阳做网站费用
  • 化妆品 营销型网站自己做网站前端开发
  • 集团网站制作方案ppt海口专业网站建设地址
  • 视频播放类网站建设费用WordPress首行缩进段落
  • 网站设计 评价 方法最近新闻大事
  • 深圳住房和建设局网站网上预约空间设计图片
  • 做渠道该从哪些网站入手长沙大的建网站公司
  • 打开英文网站字体不对产品推广网站模板
  • h5网站模板下载手机网站开发用什么
  • 注册或者浏览社交类网站时不恰当行业门户网站 自助建站
  • 万商惠网站建设系统开发wordpress轮播图修改
  • 彩票娱乐网站建设开发个人博客网站素材
  • 上海企业网站模板建站费用免费申请pos
  • 一个网站两个域名网站侧边栏设计
  • 建设和住房保障部 网站wordpress 500 - 内部服务器错误
  • 手机端购物网站模板下载做百科网站
  • 嘉定论坛网站建设华为手机网络营销策划方案
  • 2014网站备案八戒影视
  • 养殖舍建设网站河南建设信息网一体化