为什么要指定BigDecimal.equals来分别比较值和小数位数?

car车

这不是有关如何比较两个BigDecimal对象的问题-我知道您可以使用compareTo而不是equals这样做,因为equals记录为:

与compareTo不同,此方法仅在两个BigDecimal对象的值和比例相等时才认为它们相等(由此方法比较时,2.0不等于2.00)。

问题是:为什么equals以这种似乎违反直觉的方式来指定?也就是说,为什么能够区分2.0和2.00 为何很重要

似乎有一定的原因,因为Comparable指定compareTo方法文档指出:

强烈建议(尽管不是必需的)自然顺序应与等号保持一致

我认为一定有充分的理由不理会这项建议。

奥利弗·查尔斯沃斯(Oliver Charlesworth):

因为在某些情况下,精度指示(即误差容限)可能很重要。

例如,如果要存储由两个物理传感器进行的测量,则一个精度可能比另一个精度高10倍。代表这一事实可能很重要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

BigDecimal,精度和小数位数

比较BigDecimal值和double值是否等于两个小数位

使用BigDecimal确定小数位数

什么是小数位数?为什么在使用UIPinchGestureRecognizer时必须重设小数位数?

为什么新的BigDecimal(“ 0.0”)。stripTrailingZeros()的小数位数为1?

如何提取double / BigDecimal的小数位数

如何使用小数位数零舍入BigDecimal

通过用户输入指定精确的小数位数,Java

为什么Google Cloud Storage会为我的数据类型抛出不受支持的精度和小数位数值?

Java-十进制Format.parse返回具有指定小数位数的双精度值

用2个小数位舍入Bigdecimal值

为什么我的抵押贷款计算器显示的小数位数不正确?

为什么增加小数位数不会影响欧几里得距离的计算时间?

为什么小数位数的精度范围宽度有所不同?

为什么双字段的总和要超过2个小数位

将一列转换为小数并指定其小数位数和精度而不会出现算术溢出错误?

java.text.MessageFormat增加BigDecimal / Number的小数位数精度

Java BigDecimal操作“任意”显示不正确的小数位数

如何将BigDecimal转换为2个小数位数的字符串?

AssertJ无法断言BigDecimal相等且无小数位数

如果已经在数据库(Oracle)中设置BigDecimal的精度和小数位数,是否有意义?

小数精度和小数位数

如何指定在R中写入文件的数值的小数位数?

如何在Java中使用NumberFormat指定小数位数?

使用JSONSerialization序列化货币时指定小数位数

限制Excel工作台中的小数位数(不指定单元格)

matlab中的writematrix命令可以指定小数位数吗?

为什么Excel VBA中的Bankers Rounding函数根据小数位数会给出不同的结果?

当parseFloat与15个小数位一起使用时,为什么JS会降低数字的位数?