在比较两个BigDecimal的值是否相等时,要特别注意,使用equals()方法不但要求两个BigDecimal的值相等,还要求它们的scale()相等:

BigDecimal d1 = new BigDecimal("123.456");
BigDecimal d2 = new BigDecimal("123.45600");
System.out.println(d1.equals(d2)); // false,因为scale不同
System.out.println(d1.equals(d2.stripTrailingZeros())); // true,因为d2去除尾部0后scale变为2
System.out.println(d1.compareTo(d2)); // 0

必须使用compareTo()方法来比较,它根据两个值的大小分别返回负数、正数和0,分别表示小于、大于和等于。

总是使用compareTo()比较两个BigDecimal的值,不要使用equals()!

如果查看BigDecimal的源码,可以发现,实际上一个BigDecimal是通过一个BigInteger和一个scale来表示的,即BigInteger表示一个完整的整数,而scale表示小数位数:

public class BigDecimal extends Number implements Comparable<BigDecimal> {private final BigInteger intVal;private final int scale;
}

BigDecimal也是从Number继承的,也是不可变对象。

BigDecimal的大小比较相关推荐

  1. bigdecimal乘法_Java面试题之BigDecimal比较大小问题

    BigDecimal float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全 ...

  2. BigDecimal比较大小工具类

    项目中有很多地方需要比较两个BigDecimal类型值的大小,常规办法是通过compareTo进行比较,但是这样写会显得代码很长且容易混淆.参考java8中提供的Optional类,自己封装了一个Bi ...

  3. BigDecimal比较大小

    BigDecimal a = new BigDecimal (101); BigDecimal b = new BigDecimal (111);   //使用compareTo方法比较 //注意:a ...

  4. java BigDecimal比较大小

    使用的是compareTo方法 BigDecimal a=new BigDecimal(123.123); BigDecimal b =new BigDecimal(300.12); int res ...

  5. BigDecimal比较大小equals和compareTo方法

    比较BigDecimal大小有两种方法equals和compareTo,如下: public class BigdecimalTest {public static void main(String[ ...

  6. Java使用BigDecimal 比较大小

    前言 最近使用BigDicmal的情景比较多,经常会判断数值大小,故记录一下日常使用的方法. 代码 public class BigDecimalCompare {private BigDecimal ...

  7. Java中BigDecimal比较大小的方法

    场景 数据中某字段,是decimal类型,现在要在业务代码中获取某个Model的此属性是否为0, 即要将其与0.00比较大小. 实现 java中对bigdimical比较大小一般用的是bigdemic ...

  8. BigDecimal 比较大小需要注意的事项

    BigDecimal a = new BigDecimal (101); BigDecimal b = new BigDecimal (111); //使用compareTo方法比较 //注意:a.b ...

  9. bigdecimal比较大小的方法_【初中数学思维训练】第7题——比较大小的常用方法...

    1 前言 老朋友可以略去前言,直奔第2部分--正文部分 本专题以新课程标准的初中数学知识为网络,以初中数学题的一题多解为主线,以解题后的反思为枢纽,试图全面系统地培养.训练中学生的发散思维能力.综合解 ...

最新文章

  1. 这些算法工程师,他们真的是太难了!
  2. uva 10256 The Great Divide (Convex Hull, Simple)
  3. 基于CAShapeLayer和贝塞尔曲线的圆形进度条动画
  4. 哪个Linux发行版运行kvm,如何在Linux发行版上安装和配置KVM和Open vSwitch
  5. 闲说HeartBeat心跳包和TCP协议的KeepAlive机制
  6. jq select 操作
  7. Lucene实践之Query
  8. Laravel 获取文件并保存
  9. 身份证号码中间显示*星号
  10. 联想S3机子密码设置
  11. python调用高德api路径规划_Python调用高德API爬取异地驾驶距离
  12. 互联网+大赛作品_“颂中国力量 绘美好梦想”全市中小学生互联网+书画大赛作品展示(二十二)...
  13. 爬取唯美女生网站上所有小姐姐的照片
  14. 做自媒体使用哪款剪辑软件好呢?
  15. 关于MySQL的between函数含头尾的问题
  16. 大学计算机系学unity,上海交通大学计算机科学与工程系(CSE)
  17. 【HTML】HTML网页设计----模仿汉服前端设计
  18. osgEarth示例分析——osgearth_los
  19. 如何使用netsh advfirewall firewall而不是netsh firewall控制Windows Server 2008的防火墙行为
  20. HTML:路径的写法

热门文章

  1. AI不小心画版变透明了如何恢复
  2. 绝对值得收藏的十位电影配乐大师 (下)
  3. PPT中插入的视频文件无法播放的问题
  4. 【C语言刷LeetCode】235. 二叉搜索树的最近公共祖先(E)
  5. 继承LinkedHashMap实现自定义HashMap设定条件触发删除eldest元素
  6. 主键索引、唯一索引、普通索引、全文索引、组合索引的区别
  7. [HDU3072]:Intelligence System(塔尖+贪心)
  8. 国内十大券商选哪家开户最好?十大券商哪家服务最好?
  9. 斯德哥尔摩的照片六:旧城(中)
  10. docker geovis_GitHub - ThinkBlue1991/cronjob-operator