0xb*_*7ed 7 java math equals bigdecimal canonicalization
将BigDecimal
包含任意值的Java简化为规范形式的最简单方法是什么,以便BigDecimal
使用该equals()
方法将两个代表相同数字的数字相等?
我使用这样的代码从任意字符串解析我的数字:
BigDecimal x = new BigDecimal(string1, MathContext.DECIMAL64);
BigDecimal y = new BigDecimal(string2, MathContext.DECIMAL64);
Run Code Online (Sandbox Code Playgroud)
由于(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);
Run Code Online (Sandbox Code Playgroud)
将会成功...:
public static BigDecimal canonicalize(BigDecimal b) {
// TODO:
}
Run Code Online (Sandbox Code Playgroud)
如果你想知道两个BigDecimal
s 是否相等,无论大小如何,只需使用.compareTo()
public static boolean bigDecimalEquals(BigDecimal b1, BigDecimal b2) {
return b1.compareTo(b1) == 0;
}
Run Code Online (Sandbox Code Playgroud)
Javadoc 中特别推荐了这一点
此方法认为两个值相等但比例不同(例如 2.0 和 2.00)的 BigDecimal 对象相等。该方法优先于六个布尔比较运算符(<、==、>、>=、!=、<=)中每一个的单独方法。
如果您确实想转换,BigDecimal
以便.equals()
可以使用,只需使用该setScale
方法即可。
归档时间: |
|
查看次数: |
379 次 |
最近记录: |