为了账号安全,请及时绑定邮箱和手机立即绑定

使用有效数字的 BigDecimal 除法

使用有效数字的 BigDecimal 除法

蝴蝶不菲 2021-09-29 14:58:02
我使用 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();    }以编程方式确定比例以确保商具有正确数量的有效数字的正确方法是什么?
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

重要数字是视情况而定的,不可计算。正如您在评论中提到的,您正在执行一个程序来重新计算具有多种成分的溶液的百分比。我建议您转换成分的单位,直到输入中的小数点右侧没有有效数字,然后进行计算。

为此,您需要知道输入中的单位。因此,如果测试输入以“克”为单位,您首先要转换为毫克(克 * 1000)。

所以数字将是 250 和 105000;然后进行除法并保留 2 或 3 个十进制数字 - 当输入没有十进制数字时,少于这个数字通常没有意义。


查看完整回答
反对 回复 2021-09-29
  • 1 回答
  • 0 关注
  • 223 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信