Пропорционально распределить значение среди набора значений только целых - PullRequest
0 голосов
/ 03 июня 2018

Я нахожусь в этой странной ситуации, когда я получаю все тестовые случаи, за исключением этого (те же 3 числа).Я хочу пропорционально распределить наличные деньги через значения в объявленном массиве.Я хочу, чтобы пропорция была в Int или без десятичных дробей.Пожалуйста, помогите мне в этом тестовом примере: (

 public class DistProp{
    public static void main(String[] args){
    double[] a={300,300,300};
    double newA[]= new double[a.length];
    double aTotal=0;
    for(int i=0;i<a.length;i++){
      aTotal+=a[i];
    }
    double cash=100;
    System.out.println("cash:"+cash);
// this is just to show diff between running total and normal proporational distribution.
    System.out.println("before");
    double beforeTotal=0,afterTotal=0;
    for(int i=0;i<a.length;i++){
      double tmp =(a[i]/aTotal)*cash;
      System.out.println("a["+a[i]+"]="+tmp);
      beforeTotal+=tmp;
    }
    System.out.println("before Total:"+beforeTotal);
    System.out.println("after");
    double runningTotal = 0.0,oldRunningTotal=0.0;
    for(int i=0;i<a.length;i++){
      oldRunningTotal=runningTotal;
      runningTotal+=(a[i]/aTotal)*cash;
      newA[i]= (int)runningTotal - (int)oldRunningTotal;
    }
    for(int i=0;i<newA.length;i++){
      double tmp =newA[i];
      System.out.println("a["+a[i]+"]="+tmp);
      afterTotal+=tmp;
    }
    System.out.println("after Total:"+afterTotal);
  }
}

Вывод, который я получаю:

cash:100.0
before
a[300.0]=33.33333333333333
a[300.0]=33.33333333333333
a[300.0]=33.33333333333333
before Total:99.99999999999999
after
a[300.0]=33.0
a[300.0]=33.0
a[300.0]=33.0
after Total:99.0

, а не 100.

...