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)
上一篇 2022年7月13日 下午3:16
下一篇 2022年7月13日 下午3:16


相关推荐

  • FPGA实现uart_FPGA的EMU接口

    FPGA实现uart_FPGA的EMU接口一、顶层设计思路:UART即通用异步收发传输接口(UniversalAsynchronousReceiver/Transmitter),简称串口,是一种常用的通信接口,其协议原理就不赘述了,不了解的可以百度。(不赘述不代表不重要,相反,对于每一个FPGA设计,充分理解原理是基础和前提,而FPGA和Verilog只是工具。)用FPGA来实现UART,关键就是要将UART收发数据时的时序用Verilog描述出来。根据UART协议的原理,可以将整个UART分为两个模块…

    2025年11月15日
    5
  • 【13】进大厂必须掌握的面试题-配置管理面试

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 Q1。配置管理流程的目标是什么? 配置管理(CM)的目的是通过使开发或部署过程可控和可重复,从而创建更高质量的产品或…

    2021年6月23日
    118
  • mysql启动命令

    mysql启动命令1、查看mysql版本方法一:status;方法二:selectversion();2、Mysql启动、停止、重启常用命令a、启动方式1、使用service启动:[root@localhost/]#servicemysqldstart(5.0版本是mysqld)[root@szxdbetc]#servicemysqlstart(5.5.7版本是mys

    2022年5月11日
    66
  • 大数据Kafka(四):kafka的shell命令使用

    大数据Kafka(四):kafka的shell命令使用全网最详细的大数据 Kafka 文章系列 强烈建议收藏加关注 新文章都已经列出历史文章目录 帮助大家回顾前面的知识重点 目录系列历史文章 Kafka 的 shell 命令使用一 创建 topic 二 生产消息到 kafka 三 从 kafka 中消费消息四 查看主题的命令五 运行 describe 的命令六 增加 topic 分区数七 删除 topic 八 使用 kafkaTools 操作 Kafka 系列历史文章 2021 年大数据 Kafka 四 kafka 的 shell 命令使用

    2026年3月18日
    3
  • C语言实现一个关机程序

    C语言实现一个关机程序#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//system()#include<string.h>//strcmp()#include<windows.h>//shutdownintmain(){ charinput[20]={0}; //一个关机程序 //shutdown-s关机 //shutdown-s-t60设计关.

    2022年7月22日
    17

发表回复

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

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