Mus*_*ons 2 java double bigdecimal
我必须做一个双重比较,我已经尝试了很多东西,但没有什么真正起作用..他们负责停止循环.首先,使用(双)Math.round(x*10000000)/ 10000000对自己进行双倍比较,工作正常然后..数字是相同的,但不是(反之亦然),所以循环持续不断.尝试四舍五入并比较长值,仍然相同.最后,尝试使用大小数,再次遇到问题.
BigDecimal value=new BigDecimal(Double.toString(decimalNumber),MathContext.DECIMAL32);
BigDecimal temp=new BigDecimal(Double.toString((1/count)*sum),MathContext.DECIMAL32);
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题?据我所知,最好使用字符串构造函数,所以我正在使用它.第二行返回一个多汁的"java.lang.NumberFormatException",如果我编辑第二行,例如5.3222,一段时间后,第一行返回相同的错误.我应该用BigDecimals替换双打,仅用于此比较吗?这对我来说似乎很愚蠢,必须有一个简单的方法来进行这种比较.
我想比较双打,精度至少为1*10 ^ -7.
提前致谢!
鉴于浮点数具有较大的范围,为了比较两个浮点数彼此的接近程度,通常会使用 相对差异.
x
和之间的相对差异y
是Math.abs((x-y)/x)
.如果相对差异低于某个阈值,您可以认为x和y相等,例如:
if (Math.abs((x-y)/x) < 1e-9) {
// x is nearly equal to y
}
Run Code Online (Sandbox Code Playgroud)
更新:此实现有一些问题:
更好的实现首先检查x和y是否接近零,并除以最大值或最小值.您可以在Bruce Dawson的比较浮点数中阅读有关此问题的更多信息.
归档时间: |
|
查看次数: |
4508 次 |
最近记录: |