减少 Java 的最简单方法是什么 BigDecimal
包含规范形式的任意值,以便表示相同数字的两个 BigDecimal
使用 equals()
比较相等方法?
我正在使用如下代码从任意字符串中解析我的数字:
BigDecimal x = new BigDecimal(string1, MathContext.DECIMAL64);
BigDecimal y = new BigDecimal(string2, MathContext.DECIMAL64);
因为 (string1
, string2
) 是任意的,它们可以是,例如 ("1"
, "1.0000"
) 或 ("-32.5"
, "1981"
)...
我正在寻找的是上述断言所针对的规范化方法的最简单(最短/最干净的代码)实现
assert x.compareTo(y) != 0 ||
(canonicalize(x).equals(canonicalize(y)) &&
x.compareTo(canonicalize(x)) == 0 && y.compareTo(canonicalize(y)) == 0);
会成功...:
public static BigDecimal canonicalize(BigDecimal b) {
// TODO:
}
最佳答案
如果你想知道两个 BigDecimal
是否相等而不考虑比例,只需使用 .compareTo()
public static boolean bigDecimalEquals(BigDecimal b1, BigDecimal b2) {
return b1.compareTo(b1) == 0;
}
特别推荐这个in the Javadoc
Two BigDecimal objects that are equal in value but have a different scale (like 2.0 and 2.00) are considered equal by this method. This method is provided in preference to individual methods for each of the six boolean comparison operators (<, ==, >, >=, !=, <=).
如果您真的想转换 BigDecimal
以便 .equals()
可以工作,只需使用 setScale
方法。
关于java - BigDecimal 的规范表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26348679/