我是靠谱客的博主 爱听歌冥王星,最近开发中收集的这篇文章主要介绍Java中比较BigDecimal1. BigDecimal是什么2. 代码实例3. 用于比较BigDecimal的正确方法4. 关于BigDecimal的一些方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java中比较BigDecimal

  • 1. BigDecimal是什么
  • 2. 代码实例
    • 2.1. 不能用==比较Decimal的原因(代码)
    • 2.2. 不能用.equals()比较Decimal的原因(代码)
  • 3. 用于比较BigDecimal的正确方法
  • 4. 关于BigDecimal的一些方法

1. BigDecimal是什么

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算(双精度浮点型变量double可以处理16位有效数)。

float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。

BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。

也不能用==和.equals()来对BigDecimal进行比较,因为BigDecimal是个对象引用类型

对于对象引用类型:“==”比较的是对象的内存地址,且在计算机内存中,存储浮点数(单精度float和双精度double)时使用的是IEEE 754标准,就会有精度问题,在储存和准换的过程中浮点数容易引起一些较小的舍入误差。

所以我们不能使用“==”这种严格意义上的相等 来比较浮点数

.equals()方法会受数值的位数的影响,从而可能产生不正确的结果
(以上参照了百度百科)

额外知识点:《阿里巴巴Java开发手册》中有提到:在浮点数之间进行等值判断时,浮点数的基本数据类型(float、double)不能用==来比较,浮点数的包装数据类型(Float、Double)不能用 equals 来判断。

2. 代码实例

2.1. 不能用==比较Decimal的原因(代码)

在这里插入图片描述
因为==比较的是存放地址,所以会返回false

2.2. 不能用.equals()比较Decimal的原因(代码)

在这里插入图片描述
在这里插入图片描述
有可能导致出现错误的结果

3. 用于比较BigDecimal的正确方法

a.compareTo(b) : 返回 -1 表示 a 小于 b,0 表示 a 等于 b , 1表示 a 大于 b
在这里插入图片描述
在这里插入图片描述

4. 关于BigDecimal的一些方法

setScale(int x); 保留x位小数

setScale(x, BigDecimal.ROUND_DOWN); 保留1位小数,默认用四舍五入

setScale(x, BigDecimal.ROUND_HALE_UP); 保留一位小数,向上舍入

setScale(x, BigDecimal.ROUND_HALF_DOWN); 保留一位小数,向下舍入

参考的相关博客链接:https://blog.csdn.net/weixin_43901865/article/details/112566955
https://blog.csdn.net/whk_15502266662/article/details/107982039

仅以此记录学习中遇到的错误,以便以后查找。

最后

以上就是爱听歌冥王星为你收集整理的Java中比较BigDecimal1. BigDecimal是什么2. 代码实例3. 用于比较BigDecimal的正确方法4. 关于BigDecimal的一些方法的全部内容,希望文章能够帮你解决Java中比较BigDecimal1. BigDecimal是什么2. 代码实例3. 用于比较BigDecimal的正确方法4. 关于BigDecimal的一些方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部