实际上,我已经找到了可能的解决方案
//returns true
new BigDecimal("5.50").doubleValue() == new BigDecimal("5.5").doubleValue()
当然,可以通过Math.abs (v1 - v2) < EPS
使比较更加健壮的方法来改进它,但是问题是此技术是否可以接受或是否有更好的解决方案?
如果有人知道为什么Java设计人员决定以这种方式实现BigDecimal的equals,那么阅读它会很有趣。
来自BigDecimal的Javadoc
等于
public boolean equals(Object x)
将其
BigDecimal
与指定Object
的相等性进行比较。与之不同的是compareTo
,此方法
仅在 两个BigDecimal
对象的 值和比例 相等 时才 认为 它们相等(由此方法比较时,2.0不等于2.00)
。
只需使用 compareTo() == 0
我可以理解,在大小数中,2.0并不等于2.00,因为2.00实际上使用了更高精度的数字。我很难理解为什么不被认为等于,因为这两个数字实际上使用相同数量的精确数字。依我看,它们只是完全相同数字的不同表示。 我知道,我可以使用和而不是,我只是对这背后的推理感兴趣。有人能帮我理解吗?
我读到BigDecimal.equals的Java博士说: 将此BigDecimal与指定的对象进行相等比较。与compareTo不同,此方法仅当两个BigDecimal对象的值和比例相等时才认为它们相等(因此,使用此方法进行比较时,2.0不等于2.00)。 但是当我测试它时,不知何故,我得到了意想不到的结果,并且等于。我认为出于同样的原因,当我把和放在中时,大小为1,而我期望大小为2。请看下面的
我读到BigDecimal.equals的Java博士说: 将此BigDecimal与指定的对象进行相等比较。与compareTo不同,此方法仅当两个BigDecimal对象的值和比例相等时才认为它们相等(因此,使用此方法进行比较时,2.0不等于2.00)。 但是当我测试它时,不知何故我得到了意想不到的结果,等于。我想,出于同样的原因,当我把和放在中时,大小为1,而我预期大小为2。请看下面的代码,
来自Javadoc的: 注:如果对象用作中的键或中的元素,则应小心操作,因为的自然顺序与等于的顺序不一致。 例如,如果您创建一个并向其中添加和,则该集合将包含两个元素(因为值具有不同的比例,因此根据和,它们是不相等的),但是,如果对
问题内容: 为什么用显示器输出该日期? 如何转换为? 问题答案: 在PHP 5.4中,可以使用: 否则,您必须进行一些琐碎的后处理 请注意,这是表示JSON 的有效方法。
问题内容: 我在ColdFusion代码中碰巧遇到了这些值,但Google计算器似乎有相同的“错误”,但差不为零。 416582.2850-411476.8100-5105.475 = -2.36468622461E-011 http://www.google.com/search?hl=zh_CN&rlz=1C1GGLS_enUS340US340&q=416582.2850+-+411476.8