【发布时间】:2010-10-05 18:19:51
【问题描述】:
其实我已经找到了可能的解决方案
//returns true
new BigDecimal("5.50").doubleValue() == new BigDecimal("5.5").doubleValue()
当然,可以使用Math.abs (v1 - v2) < EPS 之类的方法进行改进,以使比较更加稳健,但问题是这种技术是否可以接受,还是有更好的解决方案?
如果有人知道为什么 java 设计者决定以这种方式实现 BigDecimal 的 equals,那么阅读起来会很有趣。
【问题讨论】:
-
如果保证您的 BigDecimal 对象始终可以用双精度表示,那么您无论如何都不应该使用 BigDecimal。如果不是,则此方法将失败。
-
错误的解决方案。如果双打适合您的程序,请使用双打。如果 BigDecimals 合适,请使用 BigDecimals。来回转换几乎没有用处。
-
@DJClayworth:你在哪里看到“已编辑”标签?
-
你是对的,我没有。我认为它已被编辑,因为您自己回答了它。我很抱歉。
-
由于没有人回答您关于 为什么
BigDecimal.equals以这种方式指定的评论,我已经明确询问:Why is BigDecimal.equals specified to compare both value and scale individually?
标签: java equals bigdecimal