使用有效数字的 BigDecimal 除法

我使用 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();

    }

以编程方式确定比例以确保商具有正确数量的有效数字的正确方法是什么?


蝴蝶不菲
浏览 224回答 1
1回答

大话西游666

重要数字是视情况而定的,不可计算。正如您在评论中提到的,您正在执行一个程序来重新计算具有多种成分的溶液的百分比。我建议您转换成分的单位,直到输入中的小数点右侧没有有效数字,然后进行计算。为此,您需要知道输入中的单位。因此,如果测试输入以“克”为单位,您首先要转换为毫克(克 * 1000)。所以数字将是 250 和 105000;然后进行除法并保留 2 或 3 个十进制数字 - 当输入没有十进制数字时,少于这个数字通常没有意义。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java