BigDecimal比较建议用compareTo

BigDecimal比较建议用compareTo点击上方“后端技术精选”,选择“置顶公众号”技术文章第一时间送达!作者:坚持就是胜利juejin.im/post/5d5a3882f265da03d60effb0前言前两…

大家好,又见面了,我是你们的朋友全栈君。

点击上方“后端技术精选”,选择“置顶公众号”

技术文章第一时间送达!

作者:坚持就是胜利

juejin.im/post/5d5a3882f265da03d60effb0

前言

前两天测试发现一个Bug,告诉我说他明明只修改了订单详情中商品的数量,为什么提示说订单中商品单价不能修改(后台限制了特殊单子的单价不能修改),但是他明明没有修改商品的单价,这就很奇怪了。

我看了下入参,修改接口传的该商品的单价为price=222,数据库中该商品的单价为222.000000。该字段为BigDecimal类型,除了精度不一样,值是相等的,而后台校验相等用的是equals。而网上查资料BigDecimal用的比较多的是compareTo方法。

测试两种比较

public class BigDecimalDemo {

    public static void main(String [] args) {
        BigDecimal decimal1 = new BigDecimal("222");
        BigDecimal decimal2 = new BigDecimal("222.000000");
        System.out.println(decimal1.equals(decimal2));
        System.out.println(decimal1.compareTo(decimal2));
    }
}

运行结果

640?wx_fmt=other

运行结果不出所料,BigDecimal的equals方法当精度不一样的时候也当做不相等,而compareTo方法却可以忽略精度的不同,只比较数值是否相同。

看看源码

BigDecimal的equals方法

640?wx_fmt=other

源码里说的很详细,equals方法比较value和scale(数值和精度),精度不一样,也返回false。

BigDecimal的compareTo方法

640?wx_fmt=png

compareTo也说得很详细,数值相同但是精度不同的两个数(例如2.0和2.00)被认为是相等的两个数,返回0。另外对于a.compareTo(b)方法

  • a<b, 返回-1

  • a=b,返回0

  • a>b, 返回1

推荐阅读(点击即可跳转阅读)

1. 

2. 

3. 

4. 

5. 

640?wx_fmt=png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158446.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SSH服务器拒绝密码,再试一次;PermitRootLogin yes无效问题

    SSH服务器拒绝密码,再试一次;PermitRootLogin yes无效问题最近有小伙伴xshell远程登录时,出现了如下情况:网上找的答案也是千篇一律,大多数都是说将PermitRootLogin设置为yes,重启即可,然而很多并不行。在这里,说一下所有解决办法吧,总有一个适合你:如果没有安装ssh,即看不见PermitRootLogin,则使用如下语句安装:sudoapt-getinstallopenssh-server使用vim/etc/s…

    2022年6月11日
    30
  • Pytest(17)运行未提交的git(pytest-picked)

    Pytest(17)运行未提交的git(pytest-picked)前言我们每天写完自动化用例后都会提交到git仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交git仓库的用例。pytest-picked插件可以

    2022年7月30日
    5
  • adventureworksdw2012_示例数据库怎么导入

    adventureworksdw2012_示例数据库怎么导入1、http://sqlserversamples.codeplex.com/通过网站下载示例数据库,http://msftdbprodsamples.codeplex.com/releases/view/55926 为下载地址2、其中安装AdventureWorks2008R2(oltp)的时候,需要开启sqlserver的filestream功能。点击计算机-管理-右

    2025年11月1日
    3
  • Android小项目——新闻APP

    Android小项目——新闻APP前言:在公司学习了一段时间Android知识,决定做一个小项目,目的是学会运用所学的基础知识,在这里记录一下开发历程,大家可以把它看成一款入门级练手的Demo应用吧~项目介绍:类型:新闻APP(低仿今日头条)基本功能:欢迎页面加载(3s,点击可跳过)——Activity相关用户注册/登录——SQLite运用横向滑动列表显示新闻类别——TabLayout…

    2022年5月3日
    77
  • POJ 2704 && HDU 1208 Pascal’s Travels (基础记忆化搜索)[通俗易懂]

    POJ 2704 && HDU 1208 Pascal’s Travels (基础记忆化搜索)[通俗易懂] Pascal’sTravelsTimeLimit:1000MS   MemoryLimit:65536K TotalSubmissions:5328   Accepted:2396  DescriptionAnnxngameboardispopulatedwithintegers,onenonnegative…

    2022年7月26日
    5
  • springbean生命周期通俗一点_java servlet生命周期

    springbean生命周期通俗一点_java servlet生命周期一、springBean的生命周期1、启动spring容器,也就是创建beanFactory(bean工厂),一般用的是beanFactory的子类applicationcontext,applicationcontext比一般的beanFactory要多很多功能,比如aop、事件等。通过applicationcontext加载配置文件,或者利用注解的方式扫描将bean的配置信息加载到spring容器里面。2、加载之后,spring容器会将这些

    2022年9月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号