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

【JAVA】BigDecimal判断是否为0, / by zero的问题修复

bug场景

我要处理一个任务完成率的计算,任务完成率pct = 实际值 real / 任务值 task
进入计算前,我需要判断task是否为空,或者为0,防止除法出错。
之前使用了equal方法

if(!task.equals(BigDecimal.ZERO))//开始计算

因为刚开始测试的时候没有出现问题,所以一直这样用着,昨天突然发现系统报表一直在报错

java.lang.ArithmeticException: / by zero

就知道这个判断有问题了,后来发现,BigDecimal的equal方法,还判断了精度,0和0.0并不相等。所以把全局的类似判断,全部修改,使用compare进行处理。

#改进 - compare

if (task.compareTo(BigDecimal.ZERO) != 0) {//开始计算
}

#另外的思路-signum

signum 方法会返回该 BigDecimal 对象的符号函数值。若值为 0,则返回 0;若值小于 0,则返回 -1;若值大于 0,则返回 1。

if (task.signum() != 0) {//开始计算
}
http://www.xdnf.cn/news/328771.html

相关文章:

  • leetcode 2395. Find Subarrays With Equal Sum
  • MySQL 数据备份与恢复
  • Nginx篇之限制公网IP访问特定接口url实操
  • QUIC协议优化:HTTP_3环境下的超高速异步抓取方案
  • Qt重写相关事件,原来的默认功能是不是丢失了?
  • FFmpeg(7.1版本)编译生成ffplay
  • AI Agent(5):多Agent协作系统
  • 5.6-DAE实现
  • 背单词软件开发英语app开发,超级单词表开发,河南数匠软件开发
  • 数据结构之栈与队列
  • QT6 源(83)篇二:日期类型 QDate 的源代码,及功能测试:日期与字符串互相转换时候的格式指定,
  • 中级注册安全工程师的《安全生产专业实务》科目如何选择专业?
  • Media3 中 Window 的时间相关属性详解
  • MySQL 1205错误:Lock wait timeout exceeded问题处理
  • 词编码模型和回答问题的LLM是否为同一个; 词编码模型和回答问题模型分开时:需要保证词嵌入维度一致吗
  • 软考【软考高级QA】
  • DSENT (Design Space Exploration of Networks Tool) 配合gem5
  • 时间序列数据集增强构造方案(时空网络建模)
  • 【网络编程】二、UDP网络套接字编程详解
  • 项目文档归档的最佳实践有哪些?
  • Nacos源码—Nacos集群高可用分析(二)
  • java实现一个操作日志模块功能,怎么设计
  • 【云备份】项目展示项目总结
  • 深入理解Redis缓存与数据库不一致问题及其解决方案
  • Matlab 多策略改进蜣螂优化算法及其在CEC2017性能
  • PCI-Compatible Configuration Registers--BIST Register (Offset 0Fh)
  • 跨物种交流新时代!百度发布动物语言转换专利,听懂宠物心声
  • 电池管理系统BMS三级架构——BMU、BCU和BAU详解
  • Webug4.0靶场通关笔记20- 第25关越权查看admin
  • 读《暗时间》有感