如何计算值与其总和的比率?
How to calculate the ratios of values to their sum?
我有 3 个 BigDecimal 值,我想找到 3 个值来表示它与它们之和的比率,这些比率加起来应该为 1。但是,我 运行 遇到以下错误:
BigDecimal a = new BigDecimal("19000.0000");
BigDecimal b = new BigDecimal("31000.0000");
BigDecimal c = new BigDecimal("999901467.88");
BigDecimal sum = a.add(b).add(c); //999951467.8800
BigDecimal aRatio = a.divide(sum, 4, BigDecimal.ROUND_HALF_UP); //returns 0.0000
BigDecimal bRatio = b.divide(sum, 4, BigDecimal.ROUND_HALF_UP); //returns 0.0000
BigDecimal cRatio = c.divide(sum, 4, BigDecimal.ROUND_HALF_UP); //returns 0.9999
/** returns 0.9999 doesn't equal to 1! **/
BigDecimal totalRatio = aRatio.add(bRatio).add(cRatio);
如您所见,3 个比率的总和 不等于 1。我可以将比例从 4 更改为 5,这将解决问题。 但是 我使用上面的相同代码来计算其他不同的数字。所以我试图找到一种合适的方法,将适用于任何数字的任何 X 比率。
一旦使用舍入,即表示您同意结果并非绝对正确。因此,如果目标是使比率之和等于 1,只需执行
BigDecimal aRatio = a.divide(sum, 4, BigDecimal.ROUND_HALF_UP);
BigDecimal bRatio = b.divide(sum, 4, BigDecimal.ROUND_HALF_UP);
BigDecimal cRatio = BigDecimal.ONE.subtract(aRatio.add(bRatio));
我有 3 个 BigDecimal 值,我想找到 3 个值来表示它与它们之和的比率,这些比率加起来应该为 1。但是,我 运行 遇到以下错误:
BigDecimal a = new BigDecimal("19000.0000");
BigDecimal b = new BigDecimal("31000.0000");
BigDecimal c = new BigDecimal("999901467.88");
BigDecimal sum = a.add(b).add(c); //999951467.8800
BigDecimal aRatio = a.divide(sum, 4, BigDecimal.ROUND_HALF_UP); //returns 0.0000
BigDecimal bRatio = b.divide(sum, 4, BigDecimal.ROUND_HALF_UP); //returns 0.0000
BigDecimal cRatio = c.divide(sum, 4, BigDecimal.ROUND_HALF_UP); //returns 0.9999
/** returns 0.9999 doesn't equal to 1! **/
BigDecimal totalRatio = aRatio.add(bRatio).add(cRatio);
如您所见,3 个比率的总和 不等于 1。我可以将比例从 4 更改为 5,这将解决问题。 但是 我使用上面的相同代码来计算其他不同的数字。所以我试图找到一种合适的方法,将适用于任何数字的任何 X 比率。
一旦使用舍入,即表示您同意结果并非绝对正确。因此,如果目标是使比率之和等于 1,只需执行
BigDecimal aRatio = a.divide(sum, 4, BigDecimal.ROUND_HALF_UP);
BigDecimal bRatio = b.divide(sum, 4, BigDecimal.ROUND_HALF_UP);
BigDecimal cRatio = BigDecimal.ONE.subtract(aRatio.add(bRatio));