BigDecimal的equals方法

大聪明教你学Java | 为什么不能使用 BigDecimal 的 equals 方法做等值比较? BigDecimal 是 java.math 包中提供的一种可以用来进行精确运算的类型。很多人都知道,在进行金额表示、金额计算等场景,是不能使用 double、float 等类型的,而是要使用对精度支持的更好的 BigDecimal。 所以,很多支付、电商等业务中,BigDecimal 的使用非常频繁。而且不得不说这是一个非常好用的类,其内部自带了很多方法,如加,减,乘,除等运算方法都是可以直接调用的。除了需要用 BigDecimal 表示数字和进行数字运算以外,代码中还经常需要对于数字进行相等判断。 阅读详情

BigDecimal作为浮点数据的一个处理对象,在平时用的挺多,但是今天才注意到它的equals方法有特殊的地方。

equals方法是需要比较数值的精度的。

        BigDecimal b_1 = new BigDecimal("1");//精度0
        BigDecimal b_2 = new BigDecimal("1.0");//精度1
        System.out.println(b_1.equals(b_2));//false  

        BigDecimal b_3 = new BigDecimal(1.000);
        BigDecimal b_4 = new BigDecimal(1.0);//得到的2个对象就是1,所以精度都是0
        System.out.println(b_3.equals(b_4));//true
        System.out.println(b_3.compareTo(b_4));//0

需要注意,构造函数参数是字符串的场景下,对于字面值一样的数据进行equals方法会得到错误的结果。

因此应该使用BigDecimal的compareTo()方法比较。

【置顶】TEE从入门到精通-[目录] 此专栏讲解包含不限于optee、商用TEE、常规的安全业务设计。但主要基于optee最新代码,深度讲解和剖析各项原理和机制... 阅读详情

相关推荐

保姆级教程:在CentOS 8上用libvirt + QEMU/KVM搭建ARM64虚拟机(含UEFI配置与常见坑点)

本文提供在CentOS 8上使用libvirt + QEMU/KVM搭建ARM64虚拟机的详细教程,涵盖UEFI配置与常见问题解决方案。通过环境准备、特殊配置要点、UEFI固件安装等步骤,帮助用户在x86架构服务器上高效运行ARM64虚拟化环境,特别适合开发测试与跨平台应用场景。

weixin_30292745的博客 129

BigDecimal的equals方法做等值比较问题

BigDecimal是java.math包中提供的一种可以用来进行精确运算的类型。在进行金额表示 、金额计算等场景,不能使用double和float等类型,而是使用BigDecimal。 BigDecimal表示数字和进行数字运算之外,代码中还会对BigDecimal进行相等判断。 最新阿里Java开发手册中指出 禁止使用构造方法BigDecimal(double)的方式把double值转化为BigDecimal对象。 说明: BigDecimal(double)存在精度损失风险,在精确计算或值比较的场景中

m0_45226909的博客 5392

电子产品设计中EFT防护的关键技术与实践

本文深入探讨了电子产品设计中EFT(快速瞬变脉冲群)防护的关键技术与实践。文章从EFT干扰的原理入手,系统阐述了通过优化PCB布局与地平面设计、构建电源与信号端口滤波防护电路、精选核心器件以及实施软件容错策略,来构建多层次、系统性的抗干扰防线,助力产品稳定通过严苛的电磁兼容测试。

e4f5g6h的博客 786

java学习——BigDecimal的equals原理

那么,无论我们使用new BigDecimal(0.1)还是new BigDecimal(0.10)定义,他的近似值都是0.1000000000000000055511151231257827021181583404541015625这个,那么他的标度就是这个数字的位数,即55。那么他的标度也就是1。但是,他的equals方法使用的时候需要谨慎,因为他在比较的时候,不仅比较两个数字的值,还会比较他们的标度,只要这两个因素有一个是不相等的,那么结果也是false、其他的浮点数也同样的道理。

a25847a的博客 1153

FPGA实战:AXI BRAM Controller写时序避坑指南(附Vivado配置步骤)

本文深入探讨了FPGA开发中AXI BRAM Controller的写时序实战要点与常见陷阱。文章聚焦于写地址与写数据通道的握手机制,详细解析了AWREADY、WVALID等关键信号的处理,并提供了Vivado中流水线深度、ECC等关键参数的配置步骤与优化建议,旨在帮助开发者有效规避时序问题,提升系统性能。

weixin_32306683的博客 170

保姆级教程:用Adams/Car和Simulink搞定你的第一个整车联合仿真(附模型文件)

本文提供了一份详尽的Adams/Car与Simulink联合仿真教程,涵盖从环境配置到模型导出的全流程。通过实战案例解析,帮助工程师快速掌握多体动力学仿真与控制算法开发的集成技术,特别适合汽车工程领域的初学者。文章还包含常见问题解决方案和性能优化建议,助您高效完成整车联合仿真项目。

weixin_29663861的博客 337

BigDecimal比较大小注意事项(equals)

在项目中使用BigDecimal的equals方法比较大小时,结果不为true,直接上示例 public static void main(String[] args) { BigDecimal a = new BigDecimal(0.00); BigDecimal b = new BigDecimal(0); boolean res...

Vick C的博客 1万+

机器人动力学仿真软件:PyBullet_(10).案例分析:双足机器人行走仿真

在本节中,我们将详细探讨如何使用PyBullet进行双足机器人的行走仿真。双足机器人行走仿真是一个复杂的动力学问题,涉及多个关节的协调运动和环境交互。通过本节的学习,您将了解如何创建和控制双足机器人模型,设置仿真环境,以及实现基本的行走算法。首先,我们需要创建一个双足机器人模型。PyBullet支持多种模型格式,包括URDF(Unified Robot Description Format)和MJCF(MuJoCo XML Format)。URDF是一种广泛使用的机器人模型描述格式,我们将使用URDF来创建

kkchenjj的博客 908

BigDecimal的equals方法和compareTo方法的区别

BigDecima的等值比较方法

qq_23876691的博客 3711

基于 Qt C++ 的 2D 动画制作工具

你可以修改它的中心坐标 (X, Y)、宽度 (W)、高度 (H),或点击 "选择颜色" 按钮改变其填充色。* **图形视图 (`QGraphicsView` 和 `QGraphicsScene`)**: 用于显示和编辑当前帧的内容。

寒寒豆豆软件公司的博客 112

古月学院《如何在Gazebo中实现阿克曼转向车的仿真》课程资料在ROS Noetic版本中运行时的常见错误及解决方法

   最近想在Gazebo中开发一些仿真内容,于是购买了古月学院的《如何在Gazebo中实现阿克曼转向车的仿真》课程,但是由于ROS 版本的更新,拿到手的课程资料不能直接在ROS Noetic版本中运行,经过我这几天的探索,对遇到的错误及解决方法进行了整理,方便后面购买课程的小伙伴更快的成功运行程序    在文章正式开始之前,先放一下我之前为了寻找该资料报错的原因,而写的两篇与该课程相关的文章链接,感兴趣的可以自行阅读    以阿克曼转向车为例对URDF和XACRO文件进行解读(点击可跳转)    将x

慕羽★的博客 5973

为什么不能用BigDecimal的equals方法做等值比较?

为什么不能用BigDecimal的equals方法做等值比较?

code_Linxz的博客 2858

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java BigDecimal equals()方法与示例

BigDecimal类的equals()方法 (BigDecimal Class equals() method) equals() method is available in java.math package. equals()方法在java.math包中可用。 equals() method is used to check whether this BigDecimal and t...

cumtb2009的博客 1316

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

BigDecimal可以用equals方法做等值比较吗?

结论是不可以,BigDecimal的equals方法不仅会比较值,还会比较精度,比如1.0和1.00虽然值是一样的,我们也倾向于认为是相同的,但是因为精度不同,最终得到的结论是false。得到结果:这是因为BigDecimal重写了equals这段代码是BigDecimal类中的equals方法的一部分,用于比较两个BigDecimal对象是否相等。如果传入的对象x不是BigDecimal的实例,那么返回false。2.将对象x强制转换为BigDecimal类型,并赋值给xDec。3.

java小白翻身 1231

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Java开发日记】为什么不推荐使用 BigDecimal 的 equals 方法做等值比较 ?

BigDecimal 是 java.math 包中提供的一种可以用来进行精确运算的类型。所以,在支付、电商等业务中,BigDecimal 的使用非常频繁。而且其内部自带了很多方法,如加,减,乘,除等运算方法都是可以直接调用的。除了需要用 BigDecimal 表示数字和进行数字运算以外,代码中还经常需要对于数字进行相等判断。说到等值比较,先看看《阿里巴巴Java开发手册》中的要求👇:那么为什么会有这样的要求呢🤔~ 其中的奥秘是什么呢🤔~

纵有疾风起 人生不言弃 6540

java判断bigdecimal是否为空_为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?

BigDecimal,相信对于很多人来说都不陌生,很多人都知道他的用法,这是一种java.math包中提供的一种可以用来进行精确运算的类型。 很多人都知道,在进行金额表示、金额计算等场景,不能使用double、float等类型,而是要使用对精度支持的更好的BigDecimal。 所以,很多支付、电商、金融等业务中,BigDecimal的使用非常频繁。而且不得不说这是一个非常好用的类,其内部自带了很...

weixin_39865102的博客 3万+

【Java学习笔记】BigDecimal中的equals方法和compareTo方法的区别

equals方法会比较两部分内容,分别是值 (value)和标度(scale),而对于0.1和0.10这两个数字,他们的值虽然一样,但是精度是不一样的, 所以在使用equals比较的时候会返回false。而了compareTo方法,这个方法就可以只比较两个数字的值,如果两个数相等,则返 回0。以上代码,输出结果:0。

BUNdercan的博客 439

BigDecimal的compareTo和equals方法的使用

总结,BigDecimal值比较的时候,尤其是带精度问题的,我们就可以使用compareTo方法来做了。

weixin_37799575的博客 1114

为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?

点击上方蓝色“方志朋”,选择“设为星标”回复“666”获取独家整理的学习资料!BigDecimal,相信对于很多人来说都不陌生,很多人都知道他的用法,这是一种java.math包中提供的一...

方志朋的博客 107

bigdecimal判断是否为null_为啥阿里禁用BigDecimal的equals方法做等值比较

BigDecimal,相信对于很多人来说都不陌生,很多人都知道它的用法,这是一种java.math包中提供的一种可以用来进行精确运算的类型。很多人都知道,在进行金额表示、金额计算等场景,不能使用double、float等类型,而是要使用对精度支持的更好的BigDecimal。所以,很多支付、电商、金融等业务中,BigDecimal的使用非常频繁。而且不得不说这是一个非常好用的类,其内部自带了很多方...

weixin_39840111的博客 1255

【java】java BigDecimal 禁止使用 equals 方法比较

BigDecimal是一个非常好用的表示高精度数字的类,其中提供了很多丰富的方法。但是,他的equals方法使用的时候需要谨慎,因为他在比较的时候,不仅比较两个数字的值,还会比较他们的标度,只要这两个因素有一个是不相等的,那么结果也是false、如果读者想要对两个BigDecimal的数值进行比较的话,可以使用compareTo方法。

九师兄 237

BigDecimal 类的 compareTo() 和 equals()方法

BigDecimal 类的 compareTo() 和 equals()方法 1. compareTo()源码 /** * Compares this BigDecimal with the specified BigDecimal. * Two BigDecimal objects that are equal in value but have * a different scale (like 2.0 and 2.00) are considered equal

Hello World ! 1210

BigDecimal的等值比较应该用compareTo()而不应该使用equals()方法

**问题原因:**是因为BigDecimal是对象,所以不能用 ==来判断两个数字的值是否相等 ** 以上这种问题,在有一定的经验之后,还是可以避免的,但是聪明的读者,看一下以下这行代码,你觉得他有问题吗: if(bigDecimal.equals(bigDecimal1)){ // 两个数相等 } 在使用BigDecimal的equals方法对1和1.0进行比较的时候,有的时候是true(当使用int、double定义BigDecimal时),有的时候是false(当使用String定义BigD

PPX、小布的博客 786

bigdecimal 减_为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?

前言BigDecimal,相信对于很多人来说都不陌生,很多人都知道他的用法,这是一种java.math包中提供的一种可以用来进行精确运算的类型。很多人都知道,在进行金额表示、金额计算等场景,不能使用double、float等类型,而是要使用对精度支持的更好的BigDecimal。所以,很多支付、电商、金融等业务中,BigDecimal的使用非常频繁。而且不得不说这是一个非常好用的类,其内部自带了很...

weixin_39716800的博客 75

为什么不能使用 BigDecimal 的 equals 方法做等值比较

目录前言BigDecimal 做等值比较使用 compareTo 方法PS 前言 BigDecimal 是 java.math 包中提供的一种可以用来进行精确运算的类型。所以,在支付、电商等业务中,BigDecimal 的使用非常频繁。而且其内部自带了很多方法,如加,减,乘,除等运算方法都是可以直接调用的。除了需要用 BigDecimal 表示数字和进行数字运算以外,代码中还经常需要对于数字进行相等判断。 BigDecimal 做等值比较 public static void main(Strin

马赛克大战的博客 354

bigdecimal 判断不等于0_为啥阿里禁用BigDecimal的equals方法做等值比较

BigDecimal,相信对于很多人来说都不陌生,很多人都知道它的用法,这是一种java.math包中提供的一种可以用来进行精确运算的类型。很多人都知道,在进行金额表示、金额计算等场景,不能使用double、float等类型,而是要使用对精度支持的更好的BigDecimal。所以,很多支付、电商、金融等业务中,BigDecimal的使用非常频繁。而且不得不说这是一个非常好用的类,其内部自带了很多方...

weixin_39589923的博客 1722
上一篇: Python中使用with优美的释放资源
下一篇: MongoDB备份与恢复
frwcode
博客等级 码龄8年 9粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值