У меня есть 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 с любыми цифрами.
Я считаю, что осталось после десятичной ROUND_HALF_UP первого соотношения следует добавить к следующему соотношению перед тем ROUND_HALF_UP следующего соотношения. Таким образом, в bRatio перед добавлением ROUND_HALF_UP – achin