我使用 BigDecimal 进行除法。我希望将商四舍五入到正确的有效数字位数。
例如
@Test
public void testBigDDivision() {
BigDecimal top = new BigDecimal("0.25");
BigDecimal bottom = new BigDecimal("105");
int topSigFig = significantDigits(top);
int botSigFig = significantDigits(bottom);
// evaluates to 2 in this example
int scale = (topSigFig > botSigFig) ? botSigFig : topSigFig;
BigDecimal quot = top.divide(bottom, scale, RoundingMode.HALF_UP);
BigDecimal expected = new BigDecimal("0.0024");
Assert.assertTrue(String.format("Got %s; Expected %s", quot, expected),
expected.compareTo(quot) == 0); // fails "Got 0.00; Expected 0.0024"
}
// stolen from https://stackoverflow.com/a/21443880
public static int significantDigits(BigDecimal input) {
input = input.stripTrailingZeros();
return input.scale() < 0
? input.precision() - input.scale()
: input.precision();
}
以编程方式确定比例以确保商具有正确数量的有效数字的正确方法是什么?
大话西游666
相关分类