我使用 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 个十进制数字 - 当输入没有十进制数字时,少于这个数字通常没有意义。
添加回答
举报
0/150
提交
取消