当前位置: 首页 > 知识库问答 >
问题:

为什么指定BigDecimal.Equals来单独比较值和比例?

骆昊阳
2023-03-14

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

强烈建议(尽管不是必需的)自然顺序与equals一致

我想忽略这项建议一定有很好的理由。

共有1个答案

蓬森
2023-03-14

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

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

 类似资料:
  • 下面的代码片段适用于条件1,但不适用于条件2。

  • 我读到这些方法返回值的规则是,对于obj1.compareTo(ob2),例如,如果ob2在层次结构中位于ob1之下,则返回值为负值,如果它位于ob1之上,则返回值为正(如果它等于,则返回值为0)。然而,在我的类中,我看到了使用Math.signum在compareTo方法中获得-1(表示负值)和1(表示正值)的示例。 有什么原因吗? 编辑: 以下是我的意思:

  • 问题内容: 我有一堂课,我已经简化为: 我想对这个东西进行排序。所以我创建了一个简单的copmarator: 然后,我使用的两个参数形式。 这对于我的测试用例来说很好用,但是有时由于数组以奇怪但可重复的顺序结束而完全出错。怎么会这样? 问题答案: 整数溢出…或更确切地说是下溢。 相反,进行显式比较: 如果您确定差异不会“绕回”,则可以使用减法。例如,当所讨论的值被约束为非负数时。

  • 问题内容: Github的安全webhooks页面说: 不建议使用普通运算符。类似的方法执行“恒定时间”字符串比较,从而使其免受常规正则运算符的某些定时攻击。 我在比较密码时使用。 是什么使它成为“安全比较”,我可以使用Node中的标准库来做到这一点吗? 问题答案: “恒定时间”字符串比较的意义在于,无论比较目标是什么(未知值),该比较将花费完全相同的时间量。此“恒定时间”不会向攻击者显示有关未知

  • 我们知道,在数学中有很多用于比较大小的运算符。 在 JavaScript 中,它们的编写方式如下: 大于 / 小于:a > b,a < b。 大于等于 / 小于等于:a >= b,a <= b。 检查两个值的相等:a == b,请注意双等号 == 表示相等性检查,而单等号 a = b 表示赋值。 检查两个值不相等。不相等在数学中的符号是 ≠,但在 JavaScript 中写成 a != b。 在本