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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • idea 2021.9 激活码(JetBrains全家桶)

    (idea 2021.9 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • java上传文件的几种方式_javaweb文件上传

    java上传文件的几种方式_javaweb文件上传1、ServletFileUpload  表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成httpservletRequest对象  ,在由相应的servlet进行处理。packagecom.jws.app.operater.service.impl;…

  • php7.1 ,7.2 多版本共存,同一台电脑不同项目使用不通PHP版本

    php7.1 ,7.2 多版本共存,同一台电脑不同项目使用不通PHP版本

  • pytest重试_联系人去重失败

    pytest重试_联系人去重失败安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

  • mac pycharm永久激活_mac apfs 格式

    mac pycharm永久激活_mac apfs 格式问题Pycharm使用秘钥登录服务器需要RAS格式的秘钥,然而我们在MAC上直接用ssh-keygen生成的秘钥并不满足格式要求,会发生如下报错。***iscorruptorhasunknownformat.OnlySSH2keysinOpenSSHformat(DSA,RSA,ECDSA)orPuTTYPrivateKey*.ppkkeysaresupported.Errormessage:invalidprivatekey:[B@5233fcc0

  • 2020,最新手机号码手机验证正则表达式,持续更新「建议收藏」

    2020,最新手机号码手机验证正则表达式,持续更新「建议收藏」最近在跟一个别人写好上线的项目,今天出了一个bug,部分正常的手机号验证格式不通,查看了代码发现正则表达式有较大的错误,如图:存在的问题:1.存在逗号2.不够全面,部分正常的手机号验证不通过所以决定自己写,百度一下手机号的格式,下面应该是比较全面,所以就自己根据下面的写验证的正则表达式,如有小伙伴发现下图仍有遗漏请在评论指出,我看到会马上更新最后写出来的正则表达式:Patternp=Pattern.compile(“^1(3([1-35-9]\\d|4[1-..

发表回复

您的电子邮箱地址不会被公开。

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